Ruby on rails 嵌套形式的Rails复选框
我正在尝试以嵌套形式实现一个复选框 我有3个模型:主题、课程和小组。 一个科目有许多课,每节课都有并属于许多组 换言之: 我有科目作为父班,课程作为子班,小组作为“孙子”班 在主题表单中,我允许以嵌套形式创建3个课程。 我之前已经创建了组,现在,我想在每节课中为组创建HABTM复选框,但是我在尝试在Rails中发送参数时遇到了一些麻烦 参数的主要区别在于,我目前正在发送Ruby on rails 嵌套形式的Rails复选框,ruby-on-rails,ruby-on-rails-3.2,rails-activerecord,Ruby On Rails,Ruby On Rails 3.2,Rails Activerecord,我正在尝试以嵌套形式实现一个复选框 我有3个模型:主题、课程和小组。 一个科目有许多课,每节课都有并属于许多组 换言之: 我有科目作为父班,课程作为子班,小组作为“孙子”班 在主题表单中,我允许以嵌套形式创建3个课程。 我之前已经创建了组,现在,我想在每节课中为组创建HABTM复选框,但是我在尝试在Rails中发送参数时遇到了一些麻烦 参数的主要区别在于,我目前正在发送 "lesson"=>{"group_ids"=>["105", "106", "107"]} 靠自己。然而,我
"lesson"=>{"group_ids"=>["105", "106", "107"]}
靠自己。然而,我想要的是为该主题的每个单独课程发送组ID,如下所示:
"lessons_attributes"=>{"0"=>{"lesson_type"=>"Lecture",
"id"=>"348",
"group_ids"=>["37", "38", "39", "40", "41", "42", "131"]}.
详细说明,,
这是我发送的当前完整参数:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"7r9g2d4lmiSyNZ60i8uos9m1shxVwb0Ly23Tkrshv8w=", "subject"=>{"subject_code"=>"", "subject_name"=>"",
"lessons_attributes"=>{"0"=>{"lesson_type"=>"Lecture", "id"=>"348"},
"1"=>{"lesson_type"=>"Tutorial","id"=>"349"},
"2"=>{"lesson_type"=>"Laboratory","id"=>"350"}},
"remarks"=>""},
"lesson"=>{"group_ids"=>["105", "106", "107"]}, "commit"=>"Update Subject", "id"=>"166"}
但是,我要发送的参数如下:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"7r9g2d4lmiSyNZ60i8uos9m1shxVwb0Ly23Tkrshv8w=", "subject"=>{"subject_code"=>"", "subject_name"=>"",
"lessons_attributes"=>{"0"=>{"lesson_type"=>"Lecture", "id"=>"348","group_ids"=>["37", "38", "39", "40", "41", "42", "131"]},
"1"=>{"lesson_type"=>"Tutorial","id"=>"349",
"group_ids"=>["37", "38", "39", "40", "41", "42", "131"],
"2"=>{"lesson_type"=>"Laboratory","id"=>"350",
"group_ids"=>["37", "38", "39", "40", "41", "42", "131"]}}, "remarks"=>""}, "commit"=>"Update Subject", "id"=>"166"}
我没有正确发送参数,问题在于:`
<%= check_box_tag "lesson[group_ids][]", group.id, f.object.groups.include?(group) , id: "lesson_group_ids_#{group.id}"%>`
`
特别是对于我的复选框,我实现了这一点:课程[group\u id][
我还尝试了第一课\u属性[group\u id][]。
但同样地,我也无法保存HABTM关系。我不确定我能做些什么,以便小组为每节课节省开支。任何帮助都将不胜感激
以下是相关代码:
<%= form_for(@subject) do |f| %>
<div class="field">
<%= f.label :subject_name %><br />
<%= f.text_field :subject_name %>
</div>
<div>
<%= f.fields_for :lessons do |lesson| %>
<%= render "lesson_fields", :f => lesson %>
<% end %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
课程%>
在_lesson_fields.html.erb中,我有:
<div class="field">
<%= f.label :lesson_type %><br />
<%= f.text_field :lesson_type,:readonly => true %>
</div>
<div>
<% Group.all.each do |group|%>
<div>
<%= check_box_tag "lesson[group_ids][]", group.id, f.object.groups.include?(group) , id: "lesson_group_ids_#{group.id}"%>
<%= group.group_index %>
</div>
<%end%>
</div>
正确%>
模型呢
相关模型:
class Subject < ActiveRecord::Base
attr_accessible :lessons_attributes
has_many :lessons
end
class Lesson < ActiveRecord::Base
belongs_to :subject
has_and_belongs_to_many :groups
end
class Group < ActiveRecord::Base
has_and_belongs_to_many :lessons
end
类主题
我相信您在复选框标记的名称上的“lesson”之后缺少索引(如“lesson[0][group_ids][]”。您可以手动添加该索引,也可以使用字段来执行某些操作。我倾向于执行您正在执行的操作-循环所有组并全部显示,决定是否使用布尔测试对其进行检查