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

検索する正しいキーワードは「Active Record Enumeration」であることがわかりました

enumerizeという 2 番目のものを選択します。優れた API と優れたフォーム入力ジェネレーターを提供します。また、単純なスコープとアクセサーも備えています。

于 2012-12-26T09:28:45.520 に答える