複数の OR 条件を連鎖させたい。今、私はそれらを紐のように連鎖させています。NULL
しかし、OR
句で確認したい値が約 10 ~ 20 個あります。
これは機能します:
Model.where("foo is NULL OR bar is NULL")
しかし、私はむしろ(疑似コード)のようなものが欲しいです:
Model.where("[:foo, :bar] IS NULL")
複数の OR 条件を連鎖させたい。今、私はそれらを紐のように連鎖させています。NULL
しかし、OR
句で確認したい値が約 10 ~ 20 個あります。
これは機能します:
Model.where("foo is NULL OR bar is NULL")
しかし、私はむしろ(疑似コード)のようなものが欲しいです:
Model.where("[:foo, :bar] IS NULL")
ActiveRecord はそのままでは「OR」の連鎖をサポートしていませんが、あなたの場合はそれほど難しくありません:
fields = %w{foo bar}
Model.where(fields.map{|f| "#{f} IS NULL"}.join(" OR "))
これが頻繁に必要な場合は、これを再利用可能なメソッドに抽出することもできます。
module ActiveRecord
class Base
class << self
def any_null(fields)
where(fields.map{|f| "#{quote_column_name f} IS NULL"}.join(" OR "))
end
end
end
end
これで、次のように呼び出すことができます。
Model.any_null(w%{foo bar})
当然、これはテーブル名の自動解決をサポートしていませんが、ほとんどの場合はうまくいくはずです。