蒙古观察员根本没有开火(轨道3.2.13,mongoid 3.1.3)

时间:2013-04-22 05:59:34

标签: ruby-on-rails mongoid

我想我遵循了如何准确制作观察者的描述,模型页面:

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

1 个答案:

答案 0 :(得分:0)

Rails模型在需要之前不会加载,但是您无法在尚未加载的类上注册观察者,因此您需要首先强制加载Page类。在加载所有其他文件后,即在require File.expand_path('../../app/models/article', __FILE__)

之后,尝试将application.rb添加到if defined?(Bundler) ... end