0

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

这有效:

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

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

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

1 回答 1

2

ActiveRecord 不支持开箱即用的链接“或”,但在您的情况下并不是很困难:

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

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

于 2013-11-08T15:25:44.467 回答