Rails 3.2.12和mongoid 3.0.17,观察者无法初始化,

时间:2013-04-09 16:43:45

标签: ruby-on-rails mongoid

我正在尝试创建一个观察者,以便在创建更新产品时执行某些操作。

产品型号位于命名空间“ecommerce”下,路径为“app / models / ecommerce / product.rb”

class Ecommerce::Product
  include Mongoid::Document
  include Mongoid::Timestamps

  field :market_price, type: Float, default: 0.0
  field :price, type: Float
  field :stock, type: Integer, default: 999
  blah...blah...blah

  belongs_to :shop, :class_name => "Ecommerce::Shop"
end

然后我在app下创建了一个观察者文件夹,并为上述模型创建了一个观察者类。路径是“app / observers / ecommerce / product_observer.rb”

class Ecommerce::ProductObserver < Mongoid::Observer
  observe :ecommerce_product

  def after_create(ecommerce_product)
    # do something
  end
end

在application.rb中,我使用循环将观察者加载到config.mongoid.observers,如下面的代码(已经过测试,在这里工作正常)

config.mongoid.observers = Dir["#{config.root}/app/observers/**/*.rb"].collect do |full_name|
  File.basename(full_name,'.rb').to_sym
end

最后我尝试重启rails服务器,终端上出现了错误

/Users/Ben/.rvm/gems/ruby-1.9.3-p385@opn/gems/activesupport-3.2.12/lib/active_support/inflector/methods.rb:230:
in `block in constantize': uninitialized constant ProductObserver (NameError)

我只是想知道观察命名空间模型我有什么遗漏? 有人可以帮忙吗?非常感谢!!!

1 个答案:

答案 0 :(得分:0)

您对File.basename的来电正在剥离电子商务目录。所以只剩下'product_observer'而没有命名空间的ProductObserver