RailsでのSQL直接実行にはfind_by_sqlがベスト

RailsでSQLを直接実行するfind_by_sqlについての紹介。



RailsでのSQL直接実行にはfind_by_sqlがベスト


RailsでSQLを直接実行する方法はたくさんありますが、その中でベストなのは find_by_sql だと思います。その理由はこんな感じ。


  1. ごちゃごちゃした初期化が不要
  2. プレースホルダを簡単に使える
  3. テーブルのカラムにドットでアクセスできる

find_by_sqlの使い方はこんな感じ。


users = User.find_by_sql(['select * from users where id = ?', 1])

puts users.class.name
=> "Array"

puts users.first.class.name
=> "User"

puts users.first.id
=> 1

# 名前付きプレースホルダバージョン
users = User.find_by_sql(['select * from users where id = :id', {id: 1}])


find_by_sql以外の方法


find_by_sql以外の方法もついでに紹介。


ActiveRecord::Base.connection.select_all

返り値はActiveRecord::Result、各要素はHashになっておりドットアクセスができない。プレースホルダーもActiveRecord::Base::sanitizeとかを使わないと利用できない。


ActiveRecord::Base.connection.execute

返り値はMysql2::Result。各要素の取得に一手間必要で面倒。


ActiveRecord::Base.connection.select

select_allとほぼ一緒。同じようなメソッドとしてdelete, insertもあるらしい。



参考リンク


github discourse

最近のいけてる人たちが作ったRails掲示板Webアプリケーション。Railsのベストプラクティス的なのがつまりまくってる。


Railsで生Sqlを発行する時のメモ

RailsでSQLを直打ちする方法 ~使うメソッドの違いによる戻り値の違い~

【Rails】ActiveRecord経由せずにsql直接実行する方法がたくさんあるの知らなかった…

【rails】これは便利!「.find_by_sql()」でも「?」が使えてびびった話

Railsで直接SQLを実行していい感じに値を得る


著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール