Railsで条件を指定した検索をするには、where
メソッドを使います。
rails_console
Soldier.where(name: 'Eren Yeager')
# => [#<Soldier id: 1, name: "Eren Yeager", age: 15, height: 170, weight: 63, sex: "M">]
where
メソッドには文字列や配列を渡すこともできますが、ハッシュで渡すのが読みやすさ的にも安全性にも良さそうです。比較を条件にするときは文字列で指定しないといけません。(範囲条件はハッシュでできるのに…)
rails_console
Soldier.where("height > 165 and sex = 'F'")
Soldier.where(["height > ? and sex = ?", 165, 'F'])
Soldier.where(["height > :height and sex = :sex", {height: 165, sex: 'F'}])
Soldier.where(height: 165..200, sex: 'F')
# => [#<Soldier id: 2, name: "Mikasa Ackerman", height: 170, sex: "F">, #<Soldier id: 10, name: "Sasha Blouse", height: 168, sex: "F">]
続けて書くこともできます。これは条件が指定されたりされなかったりを実装するときに役立ちそう。
rails_console
Soldier.where(height: 165..200).where(sex: 'F')
# => [#<Soldier id: 2, name: "Mikasa Ackerman", height: 170, sex: "F">, #<Soldier id: 10, name: "Sasha Blouse", height: 168, sex: "F">]
上で述べた比較条件や、その他のハッシュで指定できない条件はArel
というライブラリでハッシュ指定できるようになるみたいです。
以下のページに詳しく詳細があります。
ActiveRecord4でこんなSQLクエリどう書くの? Arel編