У меня есть модель для объекта списка воспроизведения, который имеет несколько дорожек. Это: 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
Так как здесь я использую create вместо new, это ошибка, потому что текущий создаваемый элемент списка воспроизведения еще не имеет идентификатора. Я собираюсь придерживаться удаления ключа и сейчас делать все это в контроллере, но я уверен, что должен быть какой-то способ добиться этого аккуратного трюка с заданиями. Есть мысли?
Обновление
Я только что нашел решение:
playlist_items << playlist_items.new(:track_id => track_id)
Кажется, работает. Надо было подумать о том, чтобы вернуть его обратно в свойства объекта Playlist и использовать новые ранее ...