ActiveRecord在哪里OR子句。可以比Time.now早零或一个时间

时间:2016-11-28 17:38:53

标签: ruby-on-rails activerecord

我的Food模型带有expired_at字段。如果食物未过期,则expired_at字段设置为nil。如果它已过期,则该字段设置为早于Time.now的时间。它可以设置为将来的某个时间,食物尚未过期。

如果我试图写一个让我回到未过期食物的范围,我该怎么办?我想要这样的东西:

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

上述方法无效。我该怎么办?

1 个答案:

答案 0 :(得分:1)

如果您使用的是小于5的rails版本,则不支持或。 例如 Rails 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) }