rails4 - rails_observer

rails4 rails_observer

Rails Observers (removed from core in Rails 4.0)
rails oberser在rails4中已经移除,取而代之的是rails-observers


在gem file 中添加 gem 'rails-observers’
执行bundle进行安装下载 bundle install
也可以自行安装 gem install rails-observers

创建测试工程

rails new test_rails_observer

rails g model user name:string

rake db:migrate

rails g observer user
生成app/models/user_observer.rb文件
添加两个事件,当创建和删除user的时候,输出日志
```ruby
class UserObserver < ActiveRecord::Observer
  def after_create(user)
    user.logger.info('New user added!')
  end

  def after_destroy(user)
    user.logger.warn(“User with an id of #{user.id} was destroyed!")
  end
end
```

在application.rb 文件中注册该observer,注册的步骤需要放在生成observer之后,否则执行
rails命令的时候会报错,因为执行rails会加载application.rb文件
另外也可以加载config/environments/*.rb文件中

config.active_record.observers = :user_observer

测试
启动rails控制台,创建一个用户,然后删除,看一看又没有触发两个监听的方法
 
rails c

User.create({name: “zhangsan”})
=====>New user added!
User.first.destroy
=====>user with an id of 1 was destroyed!

更多内容:
1, 注册多个监听器
config.active_record.observers = :notification_observer, :user_observer

如果两个监听器监听的是同一个对象,那么回调的顺序跟注册的时候保持一直,先后
调用:notification_observer, :user_observer

2, 一个监听器监听多个对象,使用observe, 当创建user或者teacher的时候,都会触发这个回调函数
```ruby
class NotificationObserver < ActiveRecord::Observer
  observe :user, :teacher
  def after_create(record)
    puts "NotificationObserver...."
  end
end
```

你可能感兴趣的:(rails_observer,观察器)