ステートマシンは、性質上、システム内の任意の状態に任意にジャンプすることを許可していません。それぞれにエントリーポイントがあり、状態を変更するたびにいくつかの条件が評価されます(そのうちの1つは入力イベントです)。次の状態はそれらの条件の結果です。ただし、各状態から別の状態に遷移が定義された状態マシンを使用することもできます。
class Ticket
acts_as_state_machine :initial => :new
state :new
state :open
state :resolved
event :open do
transitions :to => :open,
:from => [:new, :resolved], :guard => :can_be_open?
end
event :new do
transitions :to => :new,
:from => [:open, :resolved], :guard => :can_be_new?
end
event :resolved do
transitions :to => :resolved,
:from => [:open, :new], :guard => :can_be_resolved?
end
private
def can_be_resolved?
!resolution.blank?
end
...
end
@ticket = Ticket.create
@ticket.state # => new
@ticket.resolved!
@ticket.state # => resolved
したがって、ドロップダウンから目的の状態を確認し、結果として適切な移行を呼び出す必要があります。 attr_accessor :new_state
のような単純なものを使用してから、モデルがbefore_validation
を呼び出すnew_state => event
マッピングまたはcase文を使用できます。
[OK]を、ので、私はここに奪うためのキーポイントは、選択ボックスの値は、状態名にすることができ、モデル#」で使用することができるような状態名と一致するイベント名があることができていると思いますイベントをトリガーするために '送信'します。右? – Bryan