2012-04-18 64 views
0

我有三個型號:UserSongAlbum模型鏈接沒有設置ID,這是正常的嗎?

一個Userhas_many :songs, :albums

一個Songbelongs_to :user, :album

一個Albumbelongs_to :user, has_many :songs

當我做類似如下:

user = User.find(:first) 
album = user.albums.find(:first) 
album.songs.create(params) 

它會正常工作,並創建一個新的Song與正確設置外鍵album_id,但不會設定歌曲的user_id到誰創造了它的User。這是正常的嗎?我怎樣才能創建一個新的Song,並確保它適用於album_iduser_id

我想我可以只是有一個用戶創建一個Song,然後選擇一個Album將其添加到?

回答

0

沒有用戶那裏的鏈接。 您實例化了一個具有爲該用戶設置的user_id的相冊對象,但這並不意味着ActiveRecord會自動將該確切的user_id設置爲爲該相冊創建的歌曲。對於大多數應用程序來說,這將是非常意外的行爲

在你的情況,你可以將用戶傳遞給create方法

喜歡的東西:

album.songs.create(params.merge({:user => user})) 

無論如何,這聽起來像它應該被重構。你在哪裏叫這個代碼,是在歌曲創建動作?你從請求中得到了哪些準確的參數,爲什麼你不使用params [:song]來創建屬性?