我想在模型中存储一个状态,并且可以从一种状态更改为任何其他状态。状态列表是在模型中预定义的。
状态机对我来说太过分了,因为我不需要状态之间的事件/转换,也不想编写 N 平方转换(以允许任何状态转移到任何其他状态)。
有没有一个好的 Rails gem 可以做到这一点?我想避免自己编写所有常量/访问器/检查有效性。
我想在模型中存储一个状态,并且可以从一种状态更改为任何其他状态。状态列表是在模型中预定义的。
状态机对我来说太过分了,因为我不需要状态之间的事件/转换,也不想编写 N 平方转换(以允许任何状态转移到任何其他状态)。
有没有一个好的 Rails gem 可以做到这一点?我想避免自己编写所有常量/访问器/检查有效性。
对于这样的功能来说,宝石太多了。
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