轨道上红宝石的时间驱动状态转换

时间:2013-12-04 08:01:02

标签: ruby-on-rails ruby state-machine

我是Ruby on Rails的新手。我在我的应用程序中使用了一个模型学生。学生可以使用状态机实现两个状态有效无效。每个学生对象都有一个名为 term_end_date 的字段。我想执行以下操作:如果 term_end_date 等于 Date.today ,则状态转换:valid => :无效应该发生。

所以我想问是否有人可以知道如何实现它。提前谢谢。

1 个答案:

答案 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