我正在编写一个Spree扩展,其中模型与Spree::Variant
建立一对一的关系。我创建了以下装饰器:
# app/models/spree/variant_decorator.rb
Spree::Variant.class_eval do
has_one :persomodel, class_name: 'Extension::Persomodel'
end
我发现运行console
不会评估此装饰器。查看Variant
(版本2.0.3)中的spree_core
模型,我发现没有文件app/model/variant.rb
,只有文件app/model/variant/scope.rb
。我想这就是我的装饰师没有被评估的原因。
我怎样才能实现我想要的关系呢?
答案 0 :(得分:4)
我不确定你的结论是否正确。
在Spree应用程序中,应用程序通常包含与application.rb
中类似的部分config.to_prepare do
['../app/**/*_decorator*.rb'].each do |glob|
Dir.glob(File.join(File.dirname(__FILE__), glob)) do |c|
Rails.configuration.cache_classes ? require(c) : load(c)
end
end
end
这将迭代app目录中* _decorator * .rb格式的所有文件,并根据需要加载/加载它们。
如果您要将扩展程序构建为Rails引擎,则可以使用类似的块:
Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c|
Rails.configuration.cache_classes ? require(c) : load(c)
end
在engine.rb的config.to_prepare块中
您是否在config.to_prepare块中具有适合您项目的相应代码?如果它存在则应评估您的代码。