Viewの項目の値を配列形式でparams
に設定し、Controllerで使用する方法をメモしておきますφ(..)
手順
前提
今回は、下記のように複数のレコードに設定したCheckBoxの値を配列形式で設定し、Controller側で処理するケースを想定してます。
さらに具体的にいうと、スケジュールが設定されたレコードが複数あって、それに対してそれぞれCheckBoxで承認していく仕様を実装していきます。
手順
まず、複数のフォーム項目を配列形式でparams
に設定するには下記の形式でView側に記載します。ポイントは、要素名を要素名[]
のように設定することです。
<%= tag_name 'hoge[]' %>
今回はForm内にある複数のCheckBox
の値を配列で渡すので、Viewの実装は下記のようになります。
<%= form_tag approve_interviews_path, { method: :put } do %> <table border='1'style="border-collapse:collapse"> <thead> <tr> <% if params[:action] = 'select' %> <th>Approve</th> <% end %> <th>Title</th> <th>Schedule</th> <th>User</th> </tr> </thead> <tbody> <% @interviews.each do |interview| %> <tr> <% # 配列 approved にinterview.idを追加 %> <td><%= check_box_tag('approved[]', interview.id)%></td> <td><%= interview.title %></td> <td><%= format_datetime_string interview.schedule %></td> <td><%= interview.user.user_name %></td> </tr> <% end %> </tbody> </table> <%= submit_tag :approved %> <% end %>
Contollerで下記のように配列形式で受け取ることが出来ます。
def approve @interviews = Interview.where("id in (?)", params[:approved]) @interviews.each do |interview| interview.status = Interview::statuses[:approved] interview.save end redirect_to interviews_path end