复杂条件轨道3 activerecord查询

时间:2012-11-10 23:48:42

标签: ruby-on-rails ruby ruby-on-rails-3

以下是Package.rb中的当前代码

def self.available
  joins(:deals).where(:available_for_purchase => true).uniq
end

现在我想要更多的包条件,这里的条件是::

:duration != nil
:expiration_date > Date.today
  • 两者:持续时间和:失效日期不应该存在,我的意思是一个 其中必须为null,

  • 两者也不能为空。

  • 返回满足上述所有条件的包裹

提前致谢。

2 个答案:

答案 0 :(得分:0)

我希望我能理解这个问题,你能试试吗:

def self.available
  joins(:deals).where("available_for_purchase = ? AND duration NOT ? AND expiration_date > ?",
      true,
      nil,
      Date.today
  ).uniq
end

答案 1 :(得分:0)

好的,终于得到了查询,这是结果

def available
    joins(:deals).where("available_for_purchase=?
            AND(
               (expiration_date IS NOT NULL AND expiration_date > ? AND duration IS NULL)
                OR (duration IS NOT NULL AND expiration_date IS NULL)
         ) ",true,Date.today).group(:id)
end