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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

0回答

1695閲覧

多対多のカテゴリモデルで、viewにチェックボックスを設定する際に、チェックボックスをつけた数だけ、フォームが表示されてしまいます。

qaz3330

総合スコア113

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/05/05 07:25

編集2016/05/05 09:17

以下のようなモデルで構成しており、
GamesCategoriessは中間テーブルです。
いわゆる多対多の関係のモデルです。

  • Game
  • GamesCategories
  • Category

このような状況の中
viewにチェックボックスを設定する際に、チェックボックスをつけた数だけ、フォームが表示されてしまいます。
原因はview側でeachを回しているところだとは想像できるのですが、仮にここをループで回さないと、
fields_forのところで以下のようなエラーがでてしまうため、ループで回しました。

http://stackoverflow.com/questions/18595542/fields-for-not-working-for-has-many-association

@categories.each do |category|

やりたいこととしましては、チェックボックを複数つけた時に、
チェックボックのフォームは一つのまま、そのフォーム内に、複数のチェックがついていることです。

現状では、
複数のフォームが生成され、
一つのフォームに一つのチェックがついてしまいました。

参考までにソースの一部を転記致します。

views/games/_form.html.slim

- @categories.each do |category| = f.fields_for :category_ids, category do |ff| .form-group .field.control-group = ff.label :name, class: 'control-label' = ff.collection_check_boxes :category_id, Category.all, :id, :name, {}, class: 'form-control-inline'

game_controller

params[:game][:category_ids][:category_id].each do |category_id| next if category_id.blank? @game.games_categories.create!(game_id: @game.id, category_id: category_id) end # params[:game][:category_ids][:category_id] # => ["1", "4", "6"] # チェックをつけたid

どのように実装すれば解決するのか検討がつかず、右往左往しております。
アドバイスを頂けますと幸いです。

よろしくお願いします。


追記 2016/05/05 18時

以下のページを吟味して何度か試したところ上手くいきました。
http://ruby-rails.hatenadiary.com/entry/20150113/1421149061

ただ、よくわからないのは以下の一文です。
以下の例でいうと、Productモデルにはcateogyr_idsというカラムがないのに
なぜ、これで、複数のINERT文が走るのでしょうか?

has_manyメソッドのおかげというふうには記載されておりますが、
has_manyメソッドを記述すれば、ids属性というのが付与されるのでしょうか・・・。

ここの処理がわからず、railsのhas_manyの処理を調べていたのですが、解決できず、モヤモヤしております。

「多対多関係」をモデルで定義しておくとProductのcateogyr_ids属性に配列でカテゴリIDを設定することでhas_manyメソッドのおかげで複数のINERT文が走ります。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問