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 回答