- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试以嵌套形式实现 HABTM 复选框。
目前,我有 3 个模型。主题、类(class)和小组。协会如下:每个科目都有很多课。每节课都属于许多小组。
现在,我正在尝试在单个创建和编辑表单上实现它们。这样一节课嵌套在主题中,每节课都有一个组复选框列表来实现 HABTM 关系。
我在实现 HABTM 关系时遇到了麻烦,因为每个科目都有很多类(class),而且我不确定如何区分不同的类(class)。
为了进一步详细说明,我能够使嵌套表单正常工作,但我无法让 HABTM 复选框保存到正确的类(class)中。以下代码示例是我的 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%>
目前,我已经使用“subject[lessons_attributes[0]][group_ids][]”这一行将其保存到第一课。
但是,类(class)数量各不相同,我不太确定如何确定类(class)“编号”,即“subject[lessons_attributes[0]][group_ids][ 中的粗体 0 ]”。这样我就可以将小组保存到正确的类(class)中。
如有任何建议,我们将不胜感激。
最佳答案
对于那些使用 Rails 4 并有同样问题(和我一样)的人
@Viktor Trón 中的Group.all.each
循环的回答是不必要的:有一个新的 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
“允许”类(class)嵌套参数的方法:
params.require(:subject).permit(..., lessons_attributes: [:id, group_ids: []])
在您的 SubjectsController
中,create
或 update
操作保持不变:@subject = Subject.create(subject_params)
例如,将创建主题、相关类(class)并将它们的 HABTM 关系正确地更新到组(除非我在某处犯了错误!)。
关于ruby-on-rails - 嵌套形式的 HABTM 复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14878710/
我是一名优秀的程序员,十分优秀!