2016-11-28 47 views
0

我有一個Food模型與expired_at字段。如果食物未過期,則expired_at字段將設置爲零。如果它已過期,則該字段設置爲比Time.now早的時間。它可以設定在將來的某個時間,食物還沒有過期。ActiveRecord其中OR子句。可以等於零或早於Time.now

如果我想寫一個範圍,讓我回到沒有過期的食物,我該怎麼辦?我想要類似的東西:

scope :non_expired, -> { where(expired_at: nil OR expired_at > Time.now) 

上述不起作用。我能做什麼?

回答

1

如果您使用的rails版本低於5,則不支持或。 對於〔實施例 軌道4

scope :non_expired, ->{ where('expired_at = ? OR expired_at >', nil, Time.now) } 

Rails的5

{ where('expired_at = ?', nil).or(Food.where('expired_at > ?', Time.now) } 
+3

你可能想:這裏( '?expired_at爲空或expired_at>',Time.now) –