多态复选框创建操作



我有一个多态关联的播放列表项目。类型可以是"Lesson"或"Cue"。在我看来,我有一个复选框列表,因为你应该能够在一个播放列表中添加多个项目。同时"教训"one_answers"提示"。

我遇到的问题是让create操作知道添加的每个项目的类型。这是如何在控制器中写入的?目前,每个新条目的类型都是"Lesson",因为这是列出的第一个条目。

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 %>

在这里,您可以在模型中创建一个虚拟属性,并使用回调来更新这些记录。

您可以在播放列表模型中创建cue_ids作为属性访问器

attribute_accessor :cue_ids 
before_save :cue_ids

保存之前,您可以使用此cue_ids并更新其他模型。您可以创建lesson_ids和cue_ids作为attr_accessor。

在这里你可以得到播放列表。lesson_ids和playlistings.cue_ids

相关内容

最新更新