Rails 콘솔 명령어

rails 콘솔을 찾았고, 다음과 같은 마법 같은 작업을 할 수 있다는 것을 알게 되었습니다:

DB.exec(<<~SQL)
  UPDATE topics
  SET title = 'psql redo!'
  WHERE id = 886
SQL

콘솔에서 실행할 수 있는 명령어/함수가 무엇인지 어떻게 알 수 있을까요? 이 마법에 대해 더 자세히 배우려면 어떻게 해야 하나요?

참고: 이미 명확하다면 모르겠지만, 저는 Ruby나 Rails에 대해 아무것도 모릅니다.

정말 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를 통해 수행하여 카테고리 권한을 강제하지 않도록 하는 방법) 그렇게 할 수 있습니다.

Rails 콘솔은 Ruby를 사용합니다.

Discourse는 오픈 소스이므로, GitHub의 소스 코드를 읽으면서 저수준 프로그래밍을 배울 수 있습니다.

t=Topic.find(123)
t.title=‘my new title’
t.save

또는

t.update(title: ‘my new title’)

감사합니다. 제가 알아내지 못한 한 가지가 있었는데, 어딘가에서 가져온 값을 대입하는 방법이었어요. 예를 들어 다음과 같은 경우입니다.

t.update(title: topic2.find(123).title)

다음과 같은 방식으로 처리할 수 있습니다:

t = Topic.find(123)
t.update(title: Topic.find(124).title)

하지만 이 방법은 그만한 가치가 없을 정도로 번거롭습니다. 단계별로 처리할 수 있습니다:

t1 = Topic.find(123)
t2 = Topic.find(124)
t1.update(title: t2.title)

저도 마찬가지입니다: About this Book :: Why's (Poignant) Guide to Ruby

이 코드는 예외를 쉽게 발생시킬 수 있으므로(예외를 구제하는 것이 권장됩니다), 예외를 발생시키지 않고 nil을 반환하는 find_by를 대안으로 사용하는 것이 좋습니다. 이는 상황에 따라 어떻게 관리할지에 따라 달라질 수 있습니다.

아니, 나 항상 RoR를 2000년대의 유물이라고 생각했는데, 내가 이걸 배우게 될 줄은 꿈에도 몰랐어! :slight_smile:

SQL은 1960년대의 유물입니다. :winking_face_with_tongue:

"니치"로 생계를 유지합니다!

실제로 저는 AI를 사용해 SQL 쿼리를 작성하고 있어요. 제보다 훨씬 빠르거든요!

우리가 똑같은 부분이 바로 그거야. 복잡한 inner join이 필요한 SQL을 해야 했거든. 그리고 단순한 union도 하나 있었는데, 그건 AI한테 도움을 받았어. 1986년에 데이터베이스 수업에서 좀 더 집중했다면 이걸 어떻게 해야 하는지 알았을 텐데, 그때가 생각나. :rofl:

왜 AI한테 rails 명령어를 작성해 주라고 하지 않아?

일반적인 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;

구글링을 많이 하고 시행착오를 겪지 않고서는 제가 이 쿼리를 만들어 낼 수 없었을 겁니다!

데이터 탐색기 플러그인과 카테고리에는 많은 예제가 있습니다.