ruby-on-rails - 嵌套形式的 Rails 复选框

标签 ruby-on-rails ruby-on-rails-3.2 rails-activerecord

我正在尝试以嵌套形式实现一个复选框。

我有 3 个模型:主题、类(class)和小组。
A Subjects 有很多课,每课都有并且属于很多组。

换句话说:
我有 主题 作为父类,类(class) 作为子类和群组 作为“孙子”阶层。

在“主题”表单中,我允许以嵌套形式创建 3 个类(class)。
我之前已经创建了组,现在,我想在每节课中为组创建 HABTM 复选框,但我在尝试在 Rails 中发送参数时遇到了一些麻烦。

参数的主要区别是目前我正在发送

"lesson"=>{"group_ids"=>["105", "106", "107"]} 

在其自己的。但是,我想要的是为该主题的每个单独类(class)发送 group_ids,如下所示:
"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}"%>`

特别是对于我的复选框,我正在实现这个:类(class)[group_ids][] .

我也尝试过 course_attributes[group_ids][]。
但同样,我无法保存 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

最佳答案

我相信您在复选框标签名称上的“类(class)”之后缺少索引(如“类(class)[0] [组ID] []”。您可以手动添加,也可以使用fields_for. 我倾向于做你正在做的事情 - 遍历所有组并将它们全部显示,决定是否用 bool 测试检查它们。

关于ruby-on-rails - 嵌套形式的 Rails 复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14507836/

相关文章:

mysql - Rails 4 + ActiveRecord : How to merge data from 2 models?

ruby-on-rails - rails 4 : combining has_many :through association with polymorphic association

validation - Backbone.js 验证模型属性

ruby-on-rails - Rails 迁移 - 将列从 varchar 更改为 jsonb

ruby-on-rails - 根据数组对对象列表进行排序 (Rails)

ruby-on-rails - 如何使用 AREL 执行条件 where 子句

javascript - 我的简单 Ruby on Rails 应用程序确实有问题

ruby-on-rails-3.2 - 静态页面的 CSRF 保护

ruby-on-rails - 大礼包替换默认图像/noimage