2013-07-21 18 views
0

我有依賴於其他兩款車型的關聯像這樣一個模型:Rails的連接表與型號副教授

class InventoryItem < ActiveRecord::Base 
    attr_accessible :vendor_id, :price, :upc 
    has_many :items 
    belongs_to :vendor 
end 

我的問題是這樣的:如果我在參加模型這些關聯,我需要在遷移中再次指定這些關聯以創建inventory_items表,以便包含來自:items和:vendor的屬性?這是當前遷移(尚未執行)來創建表:

class CreateInventoryItems < ActiveRecord::Migration 
    def change 
    create_table :inventory_items do |t| 
     t.integer :upc 
     t.decimal :price 
     t.integer :vendor_id 
    end 
    end 
end 

瀏覽sqlit3 DB使我相信,我需要做的是莫名其妙。最好的方法來做到這一點?我對RoR很陌生,所以任何反饋都是值得歡迎和讚賞的。

回答

0

您的模型需要了解所有關聯,但您的遷移不關心關聯。只要您的子模型中包含外鍵,在遷移過程中只需這些就可以在數據庫級別正確設置關聯。

使用Rails,這個想法是在數據庫級別上儘可能少地執行,並儘可能地在應用程序(ORM)級別上執行。因此,你讓模型知道關聯,這將使他們能夠使用相應的ORM方法來處理關聯,但是你的數據庫不需要知道關聯。

+0

謝謝,這大多是有道理的。那麼即使沒有在遷移中指定關聯,來自:vendor和:item的屬性也會反映在我的連接表'inventory_items'中?也許更好的問題是:是否有必要在連接表'inventory_items'中反映vendor:和item的屬性,以便在我的應用中訪問它們? – settheline

+0

對於belongs_to關聯,您需要外鍵,如'vendor_id'。除此之外,只需在模型中設置關聯就足夠了。然後,您將可以執行諸如「InventoryItem.items.first」和「InventoryItem.first.vendor」之類的內容。上面的遷移應該可以正常工作。 – weltschmerz