在嵌套形式HABTM复选框(HABTM checkbox in a nested form)

2019-08-16 23:27发布

我想实现在嵌套形式的HABTM复选框。

目前,我有3种型号。 学科,课程和团体。 该协会如下:每个主题都有很多教训。 每节课都有属于多个组。

现在,我想实现所有单创建和编辑表单。 这样的教训嵌套在主题和每课有落实HABTM关系组复选框的列表。

我对着实现HABTM关系的麻烦,因为有每个科目很多教训,我不知道我怎么可以在不同的经验教训加以区分。

为了进一步阐述,我能够得到嵌套形式的工作,但我不能让HABTM复选框保存到正确的教训。 下面的代码示例是我HABTM复选框实现。

  <% Group.all.each do |group|%>
      <%= check_box_tag "subject[lessons_attributes[0]][group_ids][]", group.id, f.object.groups.include?(group) %>
      <%= group.group_index %>
  <%end%>

目前,我一直在使用这一行“主题[lessons_attributes [0] [group_ids] []”它保存到的第一课。

然而,经验教训的数量各不相同,我也不太清楚,我怎么能确定的教训“数字”,在“主题[lessons_attributes [0] [group_ids] []”,即粗体0。 这样我可以在群保存到正确的教训。

任何意见,将不胜感激。

Answer 1:

最好的做法是预生成的主题(几)课程对象(也就是form.object),那么你遍历他们有每节课领域。 如果你使用simple_form或formtastic ,收集通过复选框选择很简单:

<% form_for @subject do |form| %>
  ....
  <% form.fields_for :lessons do |lesson_form| %>
    ...
    <% lesson_form.input :group_ids, :as => :check_boxes %>

如果你想使用check_box_tag ,你应该通过经验与索引迭代,并在您的复选框名称来替代指数:

<% form_for @subject do |form| %>
  ....
  <% @subject.lessons.each_with_index do |l, i| %>
     <% Group.all.each do |group|%>
        <%= check_box_tag "subject[lessons_attributes[#{i}]][group_ids][]", group.id, l.groups.include?(group) %>
        <%= group.group_index %>
     <% end %>


Answer 2:

对于那些使用Rails 4个工作并具有相同的问题(像我)

Group.all.each环路@Viktor TRON的回答是不必要的:有一个新的FormBuilder方法, collection_check_boxes ,这已经创造了只为那!

您的代码将是:

<% form_for @subject do |form| %>
  ....
  <% @subject.lessons.each_with_index do |l, i| %>
     <%= form.fields_for :lessons, l do |lesson_fields|%>
        <%= lesson_fields.collection_check_boxes :group_ids, Group.all, :id, :group_index %>
     <% end %>
 <% end %>
<% end %>

然后,您必须添加accepts_nested_attributes_for :lessons你的Subject模式,并在您的SubjectsController ,改变subject_params法“允许”嵌套params用于在教训:

params.require(:subject).permit(..., lessons_attributes: [:id, group_ids: []])

在你SubjectsController ,在createupdate操作保持不变: @subject = Subject.create(subject_params)例如,将创建主题,相关的经验教训,正确地更新他们的HABTM关系到组(除非我什么地方搞错了!)。



文章来源: HABTM checkbox in a nested form