2012-11-10 22 views
1

下面是Package.rb複雜的條件軌3 ActiveRecord的查詢

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

現在我想包的詳細條件,這裏的條件::

:duration != nil 
:expiration_date > Date.today 
  • 兩個:持續時間和:截止日期不應該存在,我的意思是一個 它們必須爲空,

  • 兩者都不能爲空。

  • 返回包滿足上述

感謝所有條件提前。

回答

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 
0

我希望我理解這個問題的權利,你可以試試這個:

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

是的,你正確,但不明白它條件, 跳過包如果Both:duration和:expiration被設置,如果兩者都是零,則相同 – geekdeepak

+0

所以你的意思是......。如:... AND((duration = NULL和expiration_date>?)OR(duration>?AND expiration_date = NULL))AND duration NOT expiration_date' – tbraun89

+0

是的,你有我確切的問題。 :) – geekdeepak