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

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

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

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

Q&A

解決済

1回答

4976閲覧

check_boxをform_with内で使う

rayi0630

総合スコア9

Ruby on Rails 5

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

0グッド

0クリップ

投稿2020/02/23 15:32

やりたい事

・ check_boxを作る。 環境(AWSのC9)

###現在の状況
novel_listsテーブルにnovel_keyword:stringカラムを作る

novel_list.rb enum novel_keyword: { status_difference: 1, year_difference: 2, non_love: 3, villain_daughter: 4, school_love: 5, original_senki: 6, }  enumを使って、配列を作る。
<%= form_with(model: @novel_list, local: true) do |f| %> <%= f.check_box :novel_keyword, :status_difference, checked: "checked" %> <%= f.label :novel_keyword, "身分差", class: "status_difference" %> <%= f.check_box :novel_keyword, :year_difference %> <%= f.label :novel_keyword, "年の差", class: "year_difference" %> <%= f.check_box :novel_keyword, :non_love %> <%= f.label :novel_keyword, "非恋", class: "non_love" %> <%= f.check_box :novel_keyword, :villain_daughter %> <%= f.label :novel_keyword, "悪役令嬢", class: "villain_daughter" %> <%= f.check_box :novel_keyword, :school_love %> <%= f.label :novel_keyword, "スクールラブ", class: "school_love" %> <%= f.check_box :novel_keyword, :original_senki %> <%= f.label :novel_keyword, "オリジナル戦記", class: "original_senki" %> form_with内にチェックボックスを書く。

###エラー内容

NoMethodError in NovelLists#new Showing /home/ec2-user/environment/novel-favorites/app/views/novel_lists/new.html.erb where line #7 raised: undefined method `merge' for :status_difference:Symbol Extracted source (around line #7): <label for="title">タイトルを入力してください。</label></div><%= f.text_field :title, class: 'form-control', placeholder: "タイトルを20文字以内で入力してください" %> <h4 class="keyword_image">キーワード</h4> <%= f.check_box :novel_keyword, :status_difference, checked: "checked" %> <%= f.label :novel_keyword, "身分差", class: "status_difference" %> <%= f.check_box :novel_keyword, :year_difference %> <%= f.label :novel_keyword, "年の差", class: "year_difference" %>

###試した事。

radio_buttonにすると上手く行くので、checkboxの使い方に問題ありと思い検索をして。 check_box_tag にしたり、 colectionでnovel_keywordカラムに入ってるのを全て持ってこようと思ったが、 調べても、モデルからUser.all のように持ってきたりするものばかりで、断念。 <%= f.radio_button :novel_keyword, :status_difference, checked: "checked" %> <%= f.label :novel_keyword, "身分差", class: "status_difference" %>

アドバイス頂けると幸いです。よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんな風にしてはいかがでしょう?
1カラム分しか用意することはできませんが...

ruby

1<%= f.check_box :novel_keyword, {}, :status_difference, nil %> 2# 第1引数:カラム名 3# 第2引数:オプション 4# 第3引数:チェックされたときのvalue 5# 第4引数:チェックされてないときのvalue

参考にした記事はこちら

check_box (ActionView::Helpers::FormHelper) - APIdock
【Rails入門説明書】checkboxについて解説


補足:

チェックボックスというものは、基本的には、一つ一つのボックスが別々のカラムに対する選択と想定されて作られている気がします。

rayi0630さんは、ただ1種類のカラムに対して複数のチェックボックスを用意されているので、そのようなコードはrailsが受け付けてくれない可能性もかもしれないと感じています。
試していないので何とも言えませんが。

なので、今回のように小説を複数選ばせたいのであれば、小説ごとに1カラムを用意すればチェックボックスでも対応できると思います。
(そんな風に作ることはまず考えられないですが、システムの作り上はそちらの方が自然に見えます。)

どうしても1つのカラムに入れるデータとして小説を選択させるのであれば、やはりラジオボタンの方が自然だと思います。

..ただ、システムのDBとしてpostgresqlを使っているのであれば、1カラムに対して配列をinsertすることができたと思うので、無理やり作れば何かしら方法はあるのかもしれません。

投稿2020/02/24 01:28

siruku6

総合スコア1382

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

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

rayi0630

2020/02/24 13:49

ご回答ありがとうございました。 チェックボックスが、一つ一つのボックスが別々のカラムに対する選択と想定されてるとは全く知らずでした。 キーワードをいくつかチェックして貰うだけの認識でした。 ``` <%= f.check_box :novel_keyword, {}, :status_difference, nil %> <%= f.label :novel_keyword, "身分差", class: "status_difference" %> <%= f.check_box :novel_keyword, {}, :year_difference, nil %> <%= f.label :novel_keyword, "年の差", class: "year_difference" %> ``` こんな感じで無事に表示する事が出来ました。ありがとうございます。 ただ・・・これが16個並んだ状態になってしまい、コードとしての見た目はかなり悪いというか、みにくい状況です。 chek_box_colectionを上手く使えばenumで作った配列だけを取り出したりも出来るのでしょうか。こちらも一度調べて検討してみたいと思います。 今回は練習に小説家になろうのページを作ってたのですが、 キーワードがチェックボックス。小説の種類がラジオボタンでしたので、真似をした感じとなります。 最終的にherokuで練習で作ったものを、upしてみる予定なのでpostgresqlを使うと思います。現在はmysqlです。 1カラムのinsert・・・出来れば2行で済むので大変助かる内容ですね。16個ボックスを作ったので32行並んでしまいました。こちらも検索しつつ試行錯誤してみます。 わかりやすい解答ありがとうございました。またよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問