2

状態遷移ごとに呼び出したいメソッドが 2 つあります。今、私はやっています:

  aasm_event :nominate_for_publishing, :before => [:set_state_last_updated_by, :set_state_updated_at] do
    transitions :to => :under_review, :from => [:work_in_progress]
  end

  aasm_event :publish, :before => [:set_state_last_updated_by, :set_state_updated_at] do
    transitions :to => :published, :from => [:work_in_progress, :under_review], :guard => :is_publishable?
  end

  aasm_event :unpublish, :before => [:set_state_last_updated_by, :set_state_updated_at] do
    transitions :to => :work_in_progress, :from => [:published, :under_review]
  end

明らかに、これは最善のアプローチではありません。私はコードを複製しています。より基本的には、コールバックがステート マシン全体に実際に適用されるときに、コールバックを特定の遷移に関連付けています。これを処理するより良い方法は何ですか?

4

2 に答える 2

2

ダーティ属性を使用して、保存時に状態が変更されたかどうかを確認しないのはなぜですか?

そのようです、

class Model > ActiveRecord::Base

  before_save :set_state_updates

  private

  def set_state_updates
    if state_changed?
      set_state_last_updated_by
      set_state_updated_at
    end
  end 

end
于 2009-11-16T05:01:07.483 に答える
0

aasm コールバックを見てください。after_all_transitionsメソッドを使用したい。

于 2016-02-01T14:09:17.507 に答える