我想链接多个OR条件。现在我把它们像一根绳子一样链起来。但是我有大约 10-20 个值,我想用 OR
子句检查NULL
。
这有效:
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})
当然,这不支持自动表名解析,但在大多数情况下,它应该可以解决问题。