2012-06-05 105 views
2

我有一個名爲'shop'的引擎。一切都很好,除非如果我沒有在關聯聲明中添加class_name:'Shop :: MyAssociatedModel',我會得到錯誤。 例如產品具有product_images 所以如果產品的型號看起來像這樣一切正常:Rails隔離引擎模型協會

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 

該發動機以軌道發生器產生在軌道上v 3.1.something和我升級基於鏈接中的Rails Guides - Engines節軌3.2.5

+0

你有一個公共github回購?通常class_name不是字符串,它應該是'Shop :: ProductImage'而不是'Shop :: ProductImage',你需要確保你需要engine.rb文件中的product_image.rb(我認爲) –

+0

對不起,它是私人的(由於cleint的要求)。 class_name應該是字符串。您可以在rails文檔中看到 - http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html和product_image.rb是位於app/models/shop /中的模型,因此不需要它。謝謝你的評論! – ramigg

+0

gah ..我看到這個時候已經太晚了:(你是對的!我的歉意 –

回答

1

,如果不添加命名空間,它的外觀對於父應用程序模型中的類,這不是你想要的。