Spree :: Variant的装饰者

时间:2013-10-31 21:42:29

标签: ruby-on-rails spree

我正在编写一个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。我想这就是我的装饰师没有被评估的原因。

我怎样才能实现我想要的关系呢?

1 个答案:

答案 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块中具有适合您项目的相应代码?如果它存在则应评估您的代码。