Вам действительно нужно изучить Rails и не изменять базу данных напрямую. Я поступил так: нашел книгу по Rails и прочитал её. Также в какой-то момент я обратился к книге по Ruby. Я достаточно стар, чтобы помнить времена, когда книги были единственным способом обучения компьютерным технологиям. Насколько я понимаю, в интернете существует множество сайтов, предлагающих учебные пособия по Rails. Думаю, вы можете найти их через поиск в интернете.
Вот один из них, который я нашел:
Вот как обновлять данные с помощью Rails, но прочтение одного из таких руководств быстро даст вам представление о том, как это работает.
t = Topic.find(123)
t.title = 'my new title'
t.save
# или
t.update(title: 'my new title')
Когда вы выполняете действия через Rails, система проводит множество проверок. Эти проверки обычно предотвращают совершение крупных ошибок. Вам, вероятно, не следует нарушать эти правила, пока вы их не поймете.
Например, если вы хотите, чтобы пользователи создавали темы в определенной категории через API, у них должны быть права на создание темы в этой категории. Если вы действительно хотите, чтобы тема, созданная пользователем, существовала в категории, для которой у него нет прав, создайте её в другой категории, а затем попросите администратора переместить её (или сделайте это через Rails, где проверка прав доступа к категории не применяется).
Хотя это может легко вызвать исключение (которое рекомендуется перехватывать), поэтому, возможно, стоит использовать find_by в качестве альтернативы. Он вернёт nil, вместо того чтобы выбрасывать исключение, в зависимости от того, как вы хотите управлять ситуацией.
Вот в чём мы похожи. Мне нужно было выполнить SQL-запрос со сложным внутренним соединением и ещё один с простым объединением, и я попросил ИИ помочь. Дрожу, что если бы я чуть внимательнее слушал на занятиях по базам данных в 1986 году, то сам бы знал, как это сделать.
Почему бы не попросить ИИ написать для тебя команды Rails?
Для стандартных запросов select, where, sort, limit я пишу это сам, но всё, что сложнее, я теперь поручаю ИИ. Я спросил ИИ:
напиши запрос, который показывает категорию, а затем перечисляет топ-5 авторов тем для этой категории и количество созданных ими тем
И сразу получил ответ (это не база данных Discourse):
WITH TopTopicStarters AS (
SELECT
c.id AS category_id,
c.name AS category_name,
u.name AS user_name,
COUNT(t.id) AS num_topics_started,
ROW_NUMBER() OVER(PARTITION BY c.id ORDER BY COUNT(t.id) DESC) AS rank
FROM topics t
JOIN categories c ON t.category_id = c.id
JOIN users u ON t.user_id = u.userid
GROUP BY c.id, u.name
)
SELECT
c.category_name,
tts.user_name,
tts.num_topics_started
FROM categories c
JOIN TopTopicStarters tts ON c.id = tts.category_id
WHERE tts.rank <= 5;
Я бы точно не смог придумать это сам без долгих поисков в Google и множества проб и ошибок!