我正在尝试创建一个观察者,以便在创建更新产品时执行某些操作。
产品型号位于命名空间“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)
我只是想知道观察命名空间模型我有什么遗漏? 有人可以帮忙吗?非常感谢!!!
答案 0 :(得分:0)
您对File.basename
的来电正在剥离电子商务目录。所以只剩下'product_observer'
而没有命名空间的ProductObserver
。