我有播放列表项的多态关联。类型可以是"课程"或者"提示"。在我看来,我有一个复选框列表,因为您应该能够一次向播放列表添加多个项目。两个"课程"和"提示"在同一时间。
我遇到的问题是让创建操作知道每个项目添加的类型。怎么能在控制器中写出来?目前,每个新条目都具有"课程"因为这是第一个列出的。
CONTROLLER
params[:playlistings][:playlistable_ids].each do |playlistable|
@playlist.playlistings.create(:playlistable_id => playlistable, :playlistable_type => params[:playlisting][:playlistable_type])
end
VIEW
<%= simple_form_for @playlistings do |f| %>
<%= f.select :playlist_id, current_user.playlists.all.collect {|p| [ p.name, p.id ] }, {}, :required => true, :class => "form-control" %>
<% for lesson in @lesson.sub_category.lessons.order(:position) %>
<%= check_box_tag "playlistings[playlistable_ids][]", lesson.id %>
<%= f.hidden_field :playlistable_type,:value => "Lesson" %>
<% for cue in lesson.cues %>
<%= check_box_tag "playlistings[playlistable_ids][]", cue.id %>
<%= f.hidden_field :playlistable_type,:value => "Cue" %>
<% end %>
<% end %>
答案 0 :(得分:0)
在这里,您可以在模型中创建一个虚拟属性,并使用回调更新这些记录。
您可以在播放列表模型中将cue_ids创建为属性访问者
attribute_accessor :cue_ids
before_save :cue_ids
保存之前,您可以使用此cue_ids并更新其他模型。您可以创建lesson_ids和cue_ids作为attr_accesor。
在这里你可以获得 playlistings.lesson_ids和playlistings.cue_ids