多个OR与数组输入Activerecord

时间:2013-11-08 15:15:51

标签: ruby-on-rails activerecord

我想链接多个OR条件。现在我把它们串起来像一根绳子。但是我想要使用NULL子句检查OR大约10到20个值。

这有效:

Model.where("foo is NULL OR bar is NULL")

但我宁愿有类似(伪代码)的东西:

Model.where("[:foo, :bar] IS NULL")

1 个答案:

答案 0 :(得分:2)

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})

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