我有一个具有多个曲目的播放列表对象的模型。它是a:has_many:through,PlaylistItem作为连接表。
当创建模型时,我想简单地通过一个整齐的track_id数组来创建所有相关的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
由于我在这里使用create而不是new,这是一个错误,因为正在创建的当前播放列表项目还没有ID。我将坚持删除密钥并暂时在控制器中执行所有操作,但我确信必须有一些方法来实现这个整洁的分配技巧。有什么想法吗?
更新
我刚刚找到了解决方案:
playlist_items << playlist_items.new(:track_id => track_id)
似乎有效。应该考虑将其分配回播放列表对象属性并使用新的早期...
答案 0 :(得分: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