我想我遵循了如何准确制作观察者的描述,模型页面:
class Page
include Mongoid::Document
field :title, type: String
field :content, type: String
end
我有一个观察员(app / observers / page_observer.rb):
class PageObserver < Mongoid::Observer
observe :page # just to be sure!
def initialize
puts "Page observer initialized"
end
def after_update page
puts "After update page "+page
end
end
我将它添加到config / application.rb:
config.mongoid.observers = :page_observer
然后当我rails c
时,我得到:
$ rails c
Page observer initialized
Loading development environment (Rails 3.2.13)
1.9.3p194 :005 > p = Page.first
=> #<Page _id: 5174ce01681167de23000001, title: "Hi", content: nil>
1.9.3p194 :006 > p.title = "Hi1"
=> "Hi1"
1.9.3p194 :007 > p.save
=> true
当我p.save
时,我不应该看到“更新后的页面”吗?
此简化示例的完整代码:https://github.com/dts/mongoid_observer_test
答案 0 :(得分:0)
Rails模型在需要之前不会加载,但是您无法在尚未加载的类上注册观察者,因此您需要首先强制加载Page类。在加载所有其他文件后,即在require File.expand_path('../../app/models/article', __FILE__)
application.rb
添加到if defined?(Bundler) ... end