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