ワシはワシが育てる

週刊少年ジャンプと任天堂のゲームが三度のメシより好きです。

Rails(ActiveRecord)でgt、ltを使う

最近仕事が忙しくて(とても良いこと)、更新が滞りがちです。
年内年始までタスクがギッシリですが、なんとかブログも更新できるよう努力します。

今回はRuby on RailsなどでActiveRecordを使う際に
「より大きい」「より小さい」を意味するgt、ltを使う方法についてです。

その方法はいくらかありますが、最も汎用的なものとしてはArel::Tableを使うことでしょう。

具体的には以下のように使用します。

conditions = ModelName.arel_table
result = ModelName.where(conditions[:id].gt(1))

arel_tableのインスタンスはそれ自体がデータベースのレコードを取得するのではなく、検索条件を作成することに使用します。
上の例のように通常のwhere句だけでは使用できない「より大きい」といった検索条件を用いることができます。

またarel_tableはAND/OR検索の連鎖など、動的な検索条件作成に強いのが特徴です。

conditions = ModelName.arel_table
result = ModelName.where(conditions[:id].gt(1).or(conditions[:name].eq('hoge')))

検索条件はconditions.to_sqlとすれば生成されるSQLを見ることができますし、デバッグにも便利です。