3

ネストされた形式でチェックボックスを実装しようとしています。

科目、レッスン、グループの3つのモデルがあります。サブジェクトには多くのレッスンがあり、各レッスンには多くのグループがあり、それらに属しています。

別の言い方をすれば、親クラスとしてサブジェクト、子クラスとしてレッスン、「孫」クラスとしてグループがあります。

サブジェクトフォームでは、ネストされたフォームで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}"%>`

特に、私のチェックボックスでは、これを実装しています:lesson[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
4

1 に答える 1

0

チェックボックスタグの名前の「lesson」の後にインデックスがないようです(「lesson [0] [group_ids] []」のように。手動で追加するか、次の方法で何かを実行できる可能性があります。 fields_for。私はあなたがしていることをする傾向があります-すべてのグループをループしてそれらをすべて表示し、ブールテストでチェックされるかどうかを決定します。

于 2013-01-24T18:14:09.233 に答える