質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

233閲覧

check_boxの値の保持について

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2022/05/02 10:09

編集2022/05/03 02:40

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

form.check_box の最後の引数がnilだからです。ここが nil、false 以外なら選ばれた状態になります。
params にその値があるかみて true,false が入るようにすれば良いでしょう。
collection_check_boxes だと自動でやってくれたかも。

投稿2022/05/03 02:57

winterboum

総合スコア23376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問