我们从rails观察者的代码片段中可以得到什么?

时间:2013-03-04 05:05:34

标签: ruby-on-rails observers

我是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

我们可以从这段代码中得知什么? e.g。

  1. 因为它的名称是UserActionObserver,所以它是模型UserAction的观察者?
  2. 观察::post_action, :topic, :post, :notification, :topic_user,这些字段是什么意思?将创建或只是对其他模型的某些字段的一些引用?
  3. 何时调用方法after_savemodel参数是什么?

1 个答案:

答案 0 :(得分: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)