2013-01-24 102 views
3

我试图在嵌套窗体中实现一个复选框。我有3个模型:主题,课程和组。 A主题有许多经验教训,每门课都有,属于许多小组。嵌套窗体中的Rails复选框

为了把它以另一种方式: 我主题作为父类,教训作为子类和为“孙子”级。

在“主题”表单中,我允许以嵌套形式创建3节课。 我已经事先创建了组,并且现在我想为每个课程中的组创建HABTM复选框,但是我在尝试在Rails中发送参数时遇到了一些问题。

的主要区别在参数是当前我送

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

。但是我要的是为主题的每一个人的经验教训要发送这样的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}"%>` 

,特别是对于我的复选框我采取这样的:课[group_ids] []

我也试过lesson_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 

回答

0

我相信你是米在复选框标签名称的“课程”之后发布索引(如在“课程[0] [group_ids] []”中)。你可以手动添加,或者你可以用fields_for做些事情。我倾向于做你正在做的事情 - 循环遍历所有组,并将它们全部显示出来,决定是否使用布尔测试进行检查。