2012-12-26 26 views
7

之間建立關聯,我有兩個型號:2個instancied對象

class Album < ActiveRecord::Base 
    attr_accessible :name 
    has_many :products 
end 

內product.rb:模型內部

內album.rb(相冊和產品)

1)

class Product < ActiveRecord::Base 
    attr_accessible :img, :name, :price, :quantity 
    belongs_to :album 
end 

2)使用「導軌控制檯」,我該如何t協會(所以我可以使用「<%= Product.first.album.name%>」)?

例如

a = Album.create(:name => "My Album") 
p = Product.create(:name => "Shampoo X") 
# what's next? how can i set the album and the product together? 

回答

10

你可以這樣做:

a = Album.create(name: "My Album") 

p = Product.create(name: "Shampoo X") 
# OR 
p = Product.create(name: "Shampoo X", album_id: a.id) 
# OR 
p.album = a 
# OR 
p.album_id = a.id 
# OR 
a.products << a 
# finish with a save of the object: 
p.save 

您可能必須設置訪問album_id的產品型號(不知道這一點)的屬性。

查看@bdares的評論。

+1

如果添加了'_id'來訪問,那麼你可以爲你初始化它堅持id的值:'Product.create(名稱: 'Shampoo',album_id:a.id)' – bdares

+0

@bdares要添加_id,我只需要使用'attr_accessible:img,:name,:price,:quantity,:_id',對不對?但是,它給了我這個錯誤,'ActiveModel :: MassAssignmentSecurity :: Error:無法批量分配受保護的屬性:album_id' –

+0

@MrYoshiji,對於'p.album = a',它暫時工作,但如果我重新打開控制檯,p.album變成「無」。對於'p.album_id = a.id',它會給出這個錯誤,'NoMethodError:undefined method'album_id =''。對於'a.products << p',它會給出這個錯誤,'RuntimeError:不能修改凍結的Hash'。我是否需要重新生成這兩個模型?謝謝大家! –

2

在創建產品加入協會:

​​
+0

它暫時工作。但是,如果我重新打開控制檯,p.album會變成「無」。 –

+0

您是否獲取了您第一次創建的相同'Product'?試試上面的代碼,然後重新打開控制檯並嘗試'Product.find_by_name('Shampoo X')。album'。 –