我的Food
模型带有expired_at
字段。如果食物未过期,则expired_at
字段设置为nil。如果它已过期,则该字段设置为早于Time.now的时间。它可以设置为将来的某个时间,食物尚未过期。
如果我试图写一个让我回到未过期食物的范围,我该怎么办?我想要这样的东西:
scope :non_expired, -> { where(expired_at: nil OR expired_at > Time.now)
上述方法无效。我该怎么办?
答案 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) }