2010-12-13 38 views
0

我有一個包含多個Tracks的Playlist對象的模型。它是:has_many:through,PlaylistItem作爲連接表。重載模型任務以創建關聯模型

模型創建完成後,我只想通過一整套track_ids來創建所有關聯的PlaylistItems(所有軌跡已經存在)。我將它公開爲API,所以我無法真正創建好的表單/控制輸入。

# in PlaylistsController 
@playlist = Playlist.new :some_attr => "ABCDE", :playlist => ["123","22","11"] 

我想要做的就是創建一個自定義的分配方法是這樣的:由於我使用創建的,而不是新來的

class Playlist < ActiveRecord::Base 
    ... 
    def playlist=(track_array) 
    track_array.each do |track_id| 
     # check for valid track_id, add info to errors if something's wrong 
     # for valid tracks, add it to playlist_items 
     playlist_items.create(:track_id => track_id) 
    end 
    end 

,這是一個錯誤,因爲當前創建的播放列表項沒有按目前還沒有ID。我現在要堅持刪除鑰匙,並在控制器中完成所有這些工作,但我確信有一些方法可以實現這種巧妙的分配技巧。有什麼想法嗎?

更新

我只是找到了一個解決方案:

playlist_items << playlist_items.new(:track_id => track_id) 

似乎是工作。應該已經分配回播放列表對象的屬性和使用新的更早的想法...

回答

1

你可以嘗試使用內置的分配:

class Playlist < ActiveRecord::Base 
    ... 
    def playlist=(track_array) 
    self.track_ids = track_array.select do |track_id| 
     # check for valid track_id, add info to errors if something's wrong 
     # for valid tracks, return true 
    end 
    end 
    ... 
end 
+0

哦屬實,這應該不是追加每次快。謝謝! – 2011-01-07 18:44:35