Railsにてオリジナルアプリを開発しています。
form_withでcheck_boxを使用して、たくさんある項目の中から1つ以上必ず選択してもらう仕様にしています。
もし登録時にエラーになり投稿画面に戻った際、現状ではチェックした項目が消えてしまうのですが、チェックした状態で保持することは可能でしょうか?
また可能な場合、どのように記述すれば良いでしょうか?
宜しくお願い致します。
new.html.erb
1<div class="contents row"> 2 <div class="container"> 3 <h3>登録する</h3> 4 <%= form_with(model: @record, local: true) do |form| %> 5 6 <%= render 'shared/error_messages', model: form.object %> 7 8 <div class="field"> 9 <%= form.label :image, "症状の画像" %><br /> 10 <%= form.file_field :image %> 11 </div> 12 13 <div class="field"> 14 <%= form.label :onset_date, "発症日" %><br /> 15 <%= form.date_field :onset_date %> 16 </div> 17 18 <div class="field"> 19 <%= form.label :onset_time, "発症した時刻" %><br /> 20 <%= form.number_field :onset_time, in: 0..23 %>時頃 21 </div> 22 23 <div class="field"> 24 <%= form.label :body_part, "発症した部位" %><br /> 25 <% %w(顔 頭 耳 胸 腹部 背中 腕 手 足 上肢 下肢 脇 その他).each.with_index do |body_part,i| %> 26 <label> 27 <%= form.check_box :body_part, {multiple: true}, body_part, nil %> 28 <%= body_part %> 29 </label> 30 <% end%> 31 </div> 32 33 <div class="field"> 34 <%= form.label :symptom, "症状" %><br /> 35 <% %w(かゆみ 痛み ぶつぶつ 赤み カサカサ にきび じんましん アトピー イボ タコ・ウオノメ 腫れ 水ぶくれ 虫刺され 水虫 やけど 脱毛 しこり あざ ほくろ その他).each.with_index do |symptom,i| %> 36 <label> 37 <%= form.check_box :symptom, {multiple: true}, symptom, nil %> 38 <%= symptom %> 39 </label> 40 <% end%> 41 </div> 42 43 <div class="field"> 44 <%= form.label :visit_date, "病院へ行った日" %><br /> 45 <%= form.date_field :visit_date %> 46 </div> 47 48 <div class="field"> 49 <%= form.label :hospital_name, "病院名" %><br /> 50 <%= form.text_field :hospital_name %> 51 </div> 52 53 <div class="field"> 54 <%= form.label :diagnosis, "診断された病名" %><br /> 55 <%= form.text_field :diagnosis %> 56 </div> 57 58 <div class="field"> 59 <%= form.label :cause, "診断された原因" %><br /> 60 <%= form.text_field :cause %> 61 </div> 62 63 <div class="field"> 64 <%= form.label :prescription_drug, "処方された薬" %><br /> 65 <%= form.text_field :prescription_drug %> 66 </div> 67 68 <div class="field"> 69 <%= form.label :remission_date, "寛解日" %><br /> 70 <%= form.date_field :remission_date %> 71 </div> 72 73 <div class="field"> 74 <%= form.label :memo, "メモ" %><br /> 75 <%= form.text_area :memo %> 76 </div> 77 78 <%= form.submit "SEND" %> 79 <% end %> 80 </div> 81</div>
records_contoroller.rb
1class RecordsController < ApplicationController 2 before_action :authenticate_user!, only: :new 3 4 def index 5 @records = Record.includes(:user).order('created_at DESC') 6 end 7 8 def new 9 @record = Record.new 10 end 11 12 def create 13 @record = Record.new(record_params) 14 if @record.save 15 redirect_to root_path 16 else 17 render :new 18 end 19 end 20 21 def show 22 @record = Record.find(params[:id]) 23 end 24 25 private 26 27 def record_params 28 params.require(:record).permit(:image, :onset_date, :onset_time, :visit_date, :hospital_name, :diagnosis, :cause, :prescription_drug, :remission_date, :memo, symptom: [], body_part: []).merge(user_id: current_user.id) 29 end 30end
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。