###前提・実現したいこと
accepts_nested_attributes_forでネストされたフォームからデータを入力できるのですが、エディット画面では、checkboxの情報を取得できません。
入力された値を正しくEditでも表示され、その後もUpdate処理できるようにしたいです。
###発生している問題・エラーメッセージ
https://teratail.com/questions/14954
ここで書かれているような実装をしているのですが、私の場合は、cocoonというgemを使っており、ネストされたオブジェクトの特定が上手くいっていません。
###該当のソースコード
ruby
1event.rb 2 3has_many :tickets 4accepts_nested_attributes_for :tickets, allow_destroy: true
ruby
1ticket.rb 2belongs_to :event
ruby
1form 2 3<% 4if @event.id.nil? 5 resource_info = [@group, @event] 6else 7 resource_info = [@event] 8end 9%> 10 11<%= form_for( resource_info,:html => {:multipart => true, :class => "form-horizontal h-adr"}) do |f| %> 12 13<div class="row "> 14 <div class="col-md-3" > 15 <div class="gray"><span class="label-title">タイトル</span></div> 16 </div> 17 <div class="col-md-9"> 18 <%= f.text_field :title, :class =>"form-control" %> 19 </div> 20</div> 21 22<div class="row "> 23 <div class="col-md-3" > 24 <div class="gray"><span class="label-title">サブタイトル</span></div> 25 </div> 26 <div class="col-md-9"> 27 <%= f.text_field :subtitle, :class =>"form-control" %> 28 </div> 29</div> 30 31<div class="row "> 32 <div class="col-md-3" > 33 <div class="gray"><span class="label-title">概要</span></div> 34 </div> 35 <div class="col-md-9"> 36 37 38 <%= f.text_area :description, rows:15,:id => "event_description" ,:class =>"form-control" %> 39 </div> 40</div> 41 42<div class="row "> 43 <div class="col-md-3" > 44 <div class="gray"><span class="label-title">場所</span></div> 45 </div> 46 <div class="col-md-9" > 47 <div class="row"> 48 <div class="col-md-3"> 49 <%= f.label :zipcode,"郵便番号"%> 50 <%= f.text_field :zipcode ,:placeholder =>"郵便番号", :id => "event_zipcode", :class =>"form-control p-postal-code" %> 51 </div> 52 </div> 53 <%= f.label :address,"住所"%> 54 <div class="row"> 55 <div class="col-md-3"> 56 <%= f.text_field :pref ,:placeholder =>"都道府県 ", :class =>"form-control p-region" %> 57 </div> 58 <div class="col-md-3"> 59 60 <%= f.text_field :city ,:placeholder =>"市区 ", :id => "address_city", :class =>"form-control p-locality" %> 61 </div> 62 <div class="col-md-6"> 63 <%= f.text_field :address02,:placeholder =>"住所 ",:id => "address_street",:class =>"p-street-address p-extended-address form-control" %> 64 65 66 </div> 67 </div> 68 69 </div> 70</div> 71 72<div class="row "> 73 <div class="col-md-12"> 74 75 <div id="tickets"> 76 <%= f.fields_for :tickets do |builder| %> 77 <%= render "ticket_fields", f: builder %> 78 <% end %> 79 <div class="links text-center"> 80 <%= link_to_add_association "追加",f, :tickets, :class => "btn btn-info btn-lg" %> 81 </div> 82 83 </div> 84 </div> 85</div> 86 87<div class="col-md-4 col-md-offset-4 mt20"> 88 89<%= f.submit "保存" ,:id =>"eventsubmit" ,:class => "btn btn-lg btn-success btn-block" ,:disabled => "disabled" %> 90</div> 91<% end %> 92</div> 93
ruby
1ticket_fields.html.erb 2cocoonのpartialの部分です。 3 4<div class="nested-fields"> 5<h3>tickets</h3> 6 7 8<div class="row text-center"> 9 <div class="col-md-3"> 10 <span class="label-title">title</span> 11 </div> 12 <div class="col-md-9"> 13 <div class='input-group'> 14 <%= f.text_field :title, :class => "form-control" % 15 </div> 16 </div> 17</div> 18 19 20<div class="row text-center"> 21 <div class="col-md-3"> 22 <span class="label-title">対象者</span> 23 </div> 24 25 <div class="col-md-9"> 26 <%= f.hidden_field :id %> 27 28<% students = { '小学生' => 1, '中学生' => 2, '高校生' => 3 } %> 29 30<% students.each do |st,i| %> 31 <%= f.check_box :student_type, { multiple: true , include_hidden: false }, i %> 32 <%= f.label :student_type, st, :value => i %> 33<% end %> 34 35 </div> 36</div> 37 38 39<%= link_to_remove_association 'remove this', f %> 40</div>
上記のようなフォームから、下記のようにDBに格納されたことは確認できました。
student_type: "["1", "2"]"
これをeditで確認すると、このままでは、checked: の規定がないため、何も表示されません。
###試したこと
https://teratail.com/questions/14954
を確認し、checked: を実装しようとしたのですが、Ticketからfindすることが出来ていません。
パラメータを確認すると、
Parameters: {"utf8"=>"✓", "authenticity_token"=>" 省略 , "tickets_attributes"=>{"0"=>{"id"=>"24", "_destroy"=>"false"}}, ""}, "button"=>"", "id"=>"23"}
上記の通りだったので、Ticket.find(params[:tickets_attributes[:id]] を試したのですが、うまく取得できませんでした。
どのようにすればcheckedの判定ができますでしょうか。
教えてください
###補足情報(言語/FW/ツール等のバージョンなど)
Ruby 2.3
rails 4.2.1
cocoon 1.2.9
回答1件
あなたの回答
tips
プレビュー