2010-12-13 12 views
0

私は、いくつかのトラックを持つプレイリストオブジェクトのモデルを持っています。これは:has_many:throughで、PlaylistItemが結合テーブルとして使用されています。モデル割り当てをオーバーロードして関連するモデルを作成する

モデルが作成されるとき、単に、すべての関連するPlaylistItem(すべてのトラックが既に存在する)を作成するために、きちんとtrack_idsの配列を渡したいと思います。私はこれを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 

私はここで新しいの代わりに作成し使用しているので、現在のプレイリストの項目はdoesnのを作成しているので、それは誤りです私はまだ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

真ああ、これは毎回追加するよりも高速でなければなりません。ありがとう! –

関連する問題