정말 rails에 대해 배우고, 그 데이터베이스를 직접 수정하지 않는 것이 좋습니다. 저는 rails 책을 찾아서 읽었습니다. 그리고 어느 시점에는 Ruby 책도 살펴보았습니다. 저는 책이 컴퓨터를 배우는 유일한 방법이었을 때를 기억할 만큼 나이가 많습니다. 제 이해로는 인터넷에 Rails 튜토리얼을 제공하는 사이트가 많이 있습니다. 인터넷에서 검색하면 찾을 수 있는 방법이 있다고 생각합니다.
제가 찾은 사이트는 다음과 같습니다.
rails로 데이터를 업데이트하는 방법은 다음과 같습니다. 하지만 그 가이드 중 하나를 읽으면 어떻게 작동하는지 금방 파악할 수 있습니다.
t=Topic.find(123)
t.title='my new title'
t.save
# 또는
t.update(title: 'my new title')
Rails를 통해 작업을 수행하면 Rails는 많은 검사를 수행합니다. 이러한 기능들은 보통 큰 실수를 하는 것을 방지해 줍니다. 그 규칙을 이해하기 전까지는 그 규칙을 깨서는 안 될 것입니다.
예를 들어, 사용자가 API를 통해 특정 카테고리에 주제를 생성하려면, 사용자는 해당 카테고리에 주제를 생성할 권한이 있어야 합니다. 만약 사용자가 권한이 없는 카테고리에 주제를 생성하기를 정말 원한다면, 다른 카테고리에 생성한 후 관리자가 이동하도록 하거나 (또는 rails를 통해 수행하여 카테고리 권한을 강제하지 않도록 하는 방법) 그렇게 할 수 있습니다.
우리가 똑같은 부분이 바로 그거야. 복잡한 inner join이 필요한 SQL을 해야 했거든. 그리고 단순한 union도 하나 있었는데, 그건 AI한테 도움을 받았어. 1986년에 데이터베이스 수업에서 좀 더 집중했다면 이걸 어떻게 해야 하는지 알았을 텐데, 그때가 생각나.
일반적인 select, where, sort, limit 쿼리는 제가 직접 작성하지만, 그보다 복잡한 쿼리는 이제 AI에게 맡기고 있습니다. AI에게 이렇게 요청했습니다:
특정 카테고리를 표시한 뒤, 해당 카테고리에서 가장 많은 주제를 시작한 상위 5명의 사용자와 그들이 시작한 주제 수를 보여주는 쿼리를 작성해 줘
그리고 AI는 즉시 다음을 반환했습니다(이것은 Discourse가 아닌 DB입니다):
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;
구글링을 많이 하고 시행착오를 겪지 않고서는 제가 이 쿼리를 만들어 낼 수 없었을 겁니다!