具有数组输入活动记录的多个 OR



我想链接多个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})

当然,这不支持自动表名解析,但在大多数情况下,它应该可以解决问题。

相关内容

最新更新