User.find
みたいにできたらまあそれはそうなんだけど、 model がないと実行できないので生 SQL を実行する。 まず model がないってなんだよ、と言われたら無いもんはないので……。
ActiveRecord::Base.connection.select_all('SQL を書く').to_hash
例
こんな感じで。 標準の console だと整形とか色付けがされるので、 SQL 実行はだいたい想定通りの速度だけど、標準出力に戻ってくるまでがかなり長いので、1000 件以上を目安に適度に LIMIT かけましょう。
❯ rails consiole [1] pry(main)> ActiveRecord::Base.connection.select_all('SELECT * FROM users').to_hash [ [1] { "id" => 1, "login" => "hogehoge@example.com", ... "created_at" => 2023-07-14 14:00:32 +0900, "updated_at" => 2023-07-14 19:02:12 +0900 }, ... ]
select_all と execute の使い分け
という感じ。
正直 console から生 SQL 流す時に DML で INSERT/UPDATE するな、みたいな気持ちあるので、 select_all
で解決できないパターンは機能化するかなんかしましょう! という事を心がけている。
便利なメソッドたち
以下で解説されている。 ありがてぇ〜。