我是Ruby on Rails的新手。我在我的应用程序中使用了一个模型学生。学生可以使用状态机实现两个状态有效和无效。每个学生对象都有一个名为 term_end_date 的字段。我想执行以下操作:如果 term_end_date 等于 Date.today ,则状态转换:valid => :无效应该发生。
所以我想问是否有人可以知道如何实现它。提前谢谢。
答案 0 :(得分:1)
如果您不存储状态,但确定运行时的状态,该怎么办?您可以使用范围来获取具有正确状态的学生:
scope :valid, -> { where('term_end_date < ?', Time.now) }
scope :invalid, -> { where('term_end_date >= ?', Time.now) }
def state
term_end_date < Time.now ? :valid : :invalid
end
请致电:
Student.valid.where(class: 'Biology')
Student.find(13).state