Rails 隔离引擎模型关联
Posted
技术标签:
【中文标题】Rails 隔离引擎模型关联【英文标题】:Rails isolated engine model associations 【发布时间】:2012-06-05 06:59:26 【问题描述】:我有一个带有命名空间“商店”的引擎。一切都很好,除了如果我不在关联声明中添加 class_name: 'Shop::MyAssociatedModel' 会出错。 例如产品有很多product_images 所以如果产品模型看起来像这样,一切都很好:
module Shop
class Product < ActiveRecord::Base
has_many :product_images, :class_name => 'Shop::ProductImage'
end
end
如果我不使用 class_name,我会收到错误:
uninitialized constant ProductImage
在这一行:
@products.in_groups_of(3) do |products|
...
这是我的 engine.rb 文件:
module Shop
class Engine < Rails::Engine
isolate_namespace Shop
...
end
end
引擎是使用 rails v 3.1.something 上的 rails generator 创建的,我升级到 rails 3.2.5
【问题讨论】:
你在公共 github 存储库中有这个吗?通常 class_name 也不在字符串中,它应该是Shop::ProductImage
而不是 'Shop::ProductImage' 并且您需要确保在 engine.rb 文件中需要 product_image.rb(我认为)
对不起,它是私人的(由于 cleint 的要求)。 class_name 应该是字符串。您可以在 rails 文档中看到 - api.rubyonrails.org/classes/ActiveRecord/Associations/… 和 product_image.rb 是位于 app/models/shop/ 中的模型,因此不需要它。感谢您的评论!
gah .. 当我看到这个时为时已晚:(你是对的!我很抱歉。
也可以是Shop::ProductImage
(应该隐式调用to_s
)
【参考方案1】:
基于链接中的Rails Guides - Engines部分,如果你不添加命名空间,它会在父应用的模型中寻找类,这不是你想要的。
【讨论】:
以上是关于Rails 隔离引擎模型关联的主要内容,如果未能解决你的问题,请参考以下文章
如何在ClickHouse中实现资源隔离?火山引擎实践经验分享