0

我正在编写一个 Spree 扩展,其中模型与Spree::Variant. 我创建了以下装饰器:

# app/models/spree/variant_decorator.rb
Spree::Variant.class_eval do
  has_one :persomodel, class_name: 'Extension::Persomodel'
end

我发现这个装饰器不是通过运行console. 查看(2.0.3版)中的Variant模型spree_core,我看到没有文件app/model/variant.rb,只有一个文件app/model/variant/scope.rb。我想这就是我的装饰器没有被评估的原因。

那么我该如何实现我正在寻找的关系呢?

4

1 回答 1

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 块中是否有适合您项目的适当代码?如果存在,则应评估您的代码。

于 2013-10-31T23:01:20.173 回答