Rails コンソール コマンド

コンソールで実行できるコマンドや関数をどのように見つけられますか?この魔法についてもっと学ぶにはどうすればよいですか?

注:まだ明らかになっていない場合、私はRubyやRailsについて何も知りません。

「いいね!」 1

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経由で行う。これはカテゴリの権限を強制しません)、Rails経由で行ってください。

「いいね!」 8

RailsコンソールはRubyで動作します。

Discourseはオープンソースなので、GitHubにあるソースコードを読むことで、低レベルのプログラミングを学ぶことができます。

「いいね!」 1

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

または

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

ありがとうございます。例えば、どこかから取得した値で値を割り当てる方法がわかりませんでした。

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

「いいね!」 1

次のようなことができます。

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

しかし、それは手間がかかりすぎます。段階的に行うことができます。

t1 = Topic.find(123)
t2 = Topic.find(124)
t1.update(title: t2.title)
「いいね!」 3

私もです:About this Book :: Why's (Poignant) Guide to Ruby

「いいね!」 5

ただし、これは例外を発生させる可能性があるため(rescueすることを推奨します)、例外を発生させる代わりにnilを返すfind_byを代替として使用することも検討できます。これは、どのように管理したいかによって異なります。

「いいね!」 4

いやー、RoRは2000年代の遺物だと思ってたよ。まさか自分がこれを学ぶことになるとはね! :slight_smile:

「いいね!」 1

SQLは1960年代の遺物です。:winking_face_with_tongue:

「いいね!」 1

「ニッチ」は生活費を稼いでくれる!

「いいね!」 3

私は実際にAIを使ってSQLクエリを作成しています。私よりもずっと速くできます!

同じだね。複雑な内部結合を伴うSQLと、AIに手伝ってもらった簡単なユニオンを伴うSQLを実行する必要があったんだ。1986年にデータベースの授業にもう少し注意を払っていれば、やり方がわかっただろうに。:rofl:

AIにRailsコマンドを書いてもらえばいいんじゃない?

標準的なSELECT、WHERE、SORT、LIMITクエリについては自分で書きますが、それ以上に複雑なものはAIに尋ねることにしています。AIに次のように尋ねました。

「カテゴリを表示し、そのカテゴリのトピック開始者トップ5とそのトピック開始数をリストするクエリを書いてください」

するとすぐに(これは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;

これなしでは、多くのグーグル検索と試行錯誤なしには思いつくことができませんでした!

データエクスプローラープラグインとカテゴリには多くの例があります。

「いいね!」 2