1つのカラムに複数のテキストデータを入れたい
すごく初歩的な質問だと思います。
例)ユーザー登録フォームで"行ったことのある国"を入力してもらうケース
ユーザーAさんの行ったことのある国が「アメリカ」「イギリス」「中国」だったとし、そのデータをUserモデルのvisitedカラムに入れたいのですが、どうすればいいでしょうか。
そのデータをもとにやりたいことは...
- ユーザーAさんが何か国行ったことがあるかカウントしたい。
- "行ったことのある国"でユーザーの絞り込み検索がしたい。
この場合、あらかじめ選択肢で国名を設けておくと200近い選択肢が必要になりますよね。
かと言って、フォームに直接入力してもらおうとすると、「アメリカ、イギリス、中国」と書かれてはこれで一つの国になってしまいカウントできませんし、「アメリカ」に行ったことがある人としてユーザーAさんを取り出せません。
※質問の趣旨から逸れないために、ユーザーによる国名表記は別にガイド等を設けて一致しているものと仮定します。(「アメリカ」「アメリカ合衆国」「米国」など書き方は様々ですがみんな「アメリカ」と書いてくれる、などとここでは仮定する)
ユーザーAさんのvisitedカラムに "アメリカ", "イギリス", "中国" と入れられれば上記1,2は解決するのですが、それにはどうしたらいいのでしょうか。
教えていただきたいこと
- 「複数選択可の選択肢を設ける」がベストソリューションの場合、たぶんcheckboxを使用すると思うのですが、複数選択してカラムに配列でデータを送る書き方がわかりません。
- 仮に登録できる上限を5か国までとし、text_fieldを5つ設け、それぞれをvisitedカラムに関連付けるとしたらどう書けばいいのでしょうか。
質問内容からお察しいただけるかと思いますが、全くの初心者ですのでお手柔らかにお願いします。
例示用コード
コメントありがとうございます。
以下にコードを追記します。
たとえばチェックボックスで複数選択可にする場合、今の自分の知識では下記のように書くしかありません。
html
1<%= form_for(@users) do |f| %> 2 <label>アメリカ<%= f.check_box 'visited1', {}, "アメリカ" %></label> 3 <label>イギリス<%= f.check_box 'visited2', {}, "イギリス" %></label> 4 <label>中国<%= f.check_box 'visited3', {}, "中国" %></label> 5 <%= f.submit %> 6<% end %>
つまり、カラムをvisited1、visited2、visited3...と用意してそこに値を入れていくという何とも非効率なやり方です。選択肢が3つ程度ならこれでもいいのでしょうが、国名全てを選択肢にするとなると、これでは到底現実的ではなく、もっといい書き方があるはずです。
そこで、登録できる上限を5か国までとし、下記のようにtext_fieldを使ったほうがいいのかなと思ったのですが、、、
html
1<%= form_for(@users) do |f| %> 2 <p>行ったことのある国1</p> 3 <p><%= f.text_field :visited %></p> 4 <p>行ったことのある国2</p> 5 <p><%= f.text_field :visited %></p> 6 <p>行ったことのある国3</p> 7 <p><%= f.text_field :visited %></p> 8 <p>行ったことのある国4</p> 9 <p><%= f.text_field :visited %></p> 10 <p>行ったことのある国5</p> 11 <p><%= f.text_field :visited %></p> 12 <%= f.submit %> 13<% end %>
これでは最後のフィールドに入れた値しか受け取れませんよね...
この5つのフィールドに入れられた値をvisitedカラムに "アメリカ", "イギリス", "中国" といった形で保存したいのです。
1つのtext_fieldで「ユーザーが単語をスペースで区切って入力すれば配列で保存できる」なんてことはできないのでしょうかね。
ド素人のレベルの低い質問で恐縮です。
コードのサンプルなど無くても、「〇〇使えば出来るよ」「こんな感じで書けば?」的なヒントだけでもいただければ自力で調べてみますので何とぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー