はじめに Rails 5 で ActiveRecord に待望の or メソッドが追加されましたね。これで where メソッドで SQL をベタ書きすることなく OR 演算子が使えます!ただ、where と or を組み合わせた場合、実際にどのような SQL が発行されるのかが気になったので検証してみました。 検証 前準備 以下の Model と seed データを用意します。
RailsのActive Recordのwhere条件で、「複数カラムのどれかに一致していればOK」という条件を作る方法です。たとえば、性カラムと名カラムが別れたUserに対して、どちらでもいいので検索文字がヒットしてほしいというパターンのwhere条件です。 🎂 検索対象のカラムが固定されている場合(静的)Userテーブルが、次のような定義だったとします。 User id: integer family_name: string first_name: string created_at: datetime updated_at: datetime すでにOR条件の対象となるカラムが固定されている場合は、次のようなコードになります。 class User < Active Record::Base attr_protected :id scope :search_names_or, l
# Rails 4.1.10 scope1 = User.where(sex: 'male', age: 18) scope2 = User.where(sex: 'female', age: 16) # 条件ごとに括弧をつけるために Arel::FactoryMethods#grouping を使う。 condition1 = User.arel_table.grouping(scope1.where_values.reduce(:and)) condition2 = User.arel_table.grouping(scope2.where_values.reduce(:and)) User.where(condition1.or(condition2)).to_sql #=> "SELECT `users`.* FROM `users` WHERE ((`users`.`sex` =
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く