1

Railsは初めてで、いくつかのRailsコードを読んでいます:https ://github.com/discourse/discourse/blob/master/app/models/user_action_observer.rb#L1

class UserActionObserver < ActiveRecord::Observer
  observe :post_action, :topic, :post, :notification, :topic_user

  def after_save(model)
    puts 'do something'
  end
end

このコードから何を知ることができますか?例えば

  1. 名前がUserActionObserver、だからモデルのオブザーバーUserAction
  2. それは観察します::post_action, :topic, :post, :notification, :topic_user、これらのフィールドはどういう意味ですか?作成されますか、それとも他のモデルのいくつかのフィールドへの参照だけですか?
  3. メソッドafter_saveはいつ呼び出されますか、そしてmodel引数は何ですか?
4

1 に答える 1

2

オブザーバークラス名は任意の名前にすることができます。本当に重要なのはこの行です

observe :post_action, :topic, :post, :notification, :topic_user

これは、PostAction、Topic、Post、Notification、およびTopicUserの下で作成されたオブジェクトを監視します

after_save、レコードを作成および更新した後に呼び出されます。渡された引数は、関係する実際のオブジェクトであるため、5つの観測されたモデルのいずれかのインスタンスである可能性があります。パラメータ名として使用modelするのは少し誤解を招くので、次のように変更する必要がありますrecord

更新:APIから

オブザーバーは、デフォルトで、名前を共有するクラスにマップされます。したがって、CommentObserverは、Commentの監視に関連付けられ、ProductManagerObserverはProductManagerに関連付けられます。監視対象のクラスとは異なる名前をオブザーバーに付ける場合は、Observer.observeクラスメソッドを使用できます。このメソッドは、具象クラス(Product)またはそのクラスのシンボル(:product)のいずれかを取ります。

于 2013-03-04T05:09:54.437 に答える