0

Railsアプリ(ActiveRecordを使用)にAASMで定義されたステートマシンがあり、多くのコールバックがあります。これらのコールバックの一部には、繰り返しコードが含まれています。たとえば、状態が変化するたびに、レコードを作成して保存し、メールを送信する必要があります。

event :revision, after: :revision_event_callback do
  # ...
end

event :basic_submit, after: :basic_submit_event_callback do
  # ...
end

event :approve, after: :approve_event_callback do
  # ...
end

def revision_event_callback
  OrderStatusMailer.status_change_report(self, :revision)
  state_changes.build(transition: :revision)
end

def basic_submit_event_callback
  OrderStatusMailer.status_change_report(self, :basic_submit)
  state_changes.build(transition: :basic_submit)
  # ...
  # basic_submit-specific events
end

def approve_event_callback
  OrderStatusMailer.status_change_report(self, :approve)
  state_changes.build(transition: :approve)
end

代わりに、汎用コールバックを 1 つ用意し、それが必要なイベント用に特定のコールバックを追加したいと考えています。

def event_callback(event_name)
  OrderStatusMailer.status_change_report(self, event_name)
  state_changes.build(transition: event_name)
end

def basic_submit_event_callback
  # basic_submit-specific events
end

これはまったく可能ですか?そして、非常に重要なことですが、そのコードは、トリガーされたイベントの名前にどのようにアクセスするのでしょうか?

4

2 に答える 2

2

これをどうするか。

after_all_events : event_callback

後でメソッドを定義する

 def event_callback(*args)
    # do stuff here
    after_callback = "after_#{current_event}"
    send(callback, *args) if respond_to?(callback)
 end
于 2016-10-07T07:27:05.327 に答える