0

我想在模型中存储一个状态,并且可以从一种状态更改为任何其他状态。状态列表是在模型中预定义的。

状态机对我来说太过分了,因为我不需要状态之间的事件/转换,也不想编写 N 平方转换(以允许任何状态转移到任何其他状态)。

有没有一个好的 Rails gem 可以做到这一点?我想避免自己编写所有常量/访问器/检查有效性。

4

2 回答 2

2

对于这样的功能来说,宝石太多了。

class Model < ActiveRecord::Base

  # validation
  validate :state_is_in_list

  # All the possible states
  STATUS = %w{foo bar zoo loo}

  # method to change to a state. !! Not sure if this is the right syntax
  STATUS.each do |state|
    define_method "#{state}!" do
      write_attribute :state, state
    end

    # Also ? methods are handy for conditions
    define_method "#{state}?" do
      state == read_attribute(:state)
    end
  end
  # So you can do model.bar! and it will change state to 'bar'
  # And model.bar? will return true if it is in 'bar' state


  private
  def child_and_team_code_exists
   errors.add(:state, 'Not a valid state') unless STATUS.include? state
  end

end
于 2012-12-26T04:45:55.623 回答
0

我发现要搜索的正确关键字应该是“活动记录枚举”

我选择第二个叫做enumerize。它提供了很好的 API 和良好的表单输入生成器。它也有一个简单的范围和访问器。

于 2012-12-26T09:28:45.520 回答