モデルに状態を保存したいのですが、ある状態から別の状態に変更できます。状態のリストは、モデルで事前定義されています。
状態間のイベント/遷移は必要なく、(任意の状態から他の状態への遷移を許可するために) 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
検索する正しいキーワードは「Active Record Enumeration」であることがわかりました
enumerizeという 2 番目のものを選択します。優れた API と優れたフォーム入力ジェネレーターを提供します。また、単純なスコープとアクセサーも備えています。