###前提・実現したいこと
選択肢の数が固定されていないアンケートシステムを作成しています。
questions(has_many :choices)というテーブルに質問内容を収め、
choices(belongs_to :question)というテーブルに選択肢を収めようとしています。
choicesというテーブルにはquestion_idとchoiceというカラムがあり、
question_idカラムには質問のID、choiceカラムには選択肢の文言がひとつづつ入るイメージです。
choicesテーブル(理想イメージ) |id|question_id| choice| | 1| 1|選択肢1| | 2| 1|選択肢2| | 3| 1|選択肢3| | 4| 2|選択肢1| | 5| 2|選択肢2| | 6| 3|選択肢1| | 7| 3|選択肢2| | 8| 3|選択肢3| | 9| 3|選択肢4|
###発生している問題
accepts_nested_attributes_for :choicesでquestionモデルからつなぎ、
新規作成フォームにてfields_forでループさせようとしているんですが、JSで増減させているinputのnameが同じ「:choice」なので最後のものだけがテーブルに保存されます。
#理想に近い形だけど動かない例 <%= form.fields_for :choices do |c| %> <li> <%= c.label :choice, '選択肢' %> <%= c.text_field :choice %> </li> <li> <%= c.label :choice, '選択肢' %> <%= c.text_field :choice %> </li> <% end %>
試行錯誤の末、↓このようにRailsに頼らずに手動でnameやidを置いてみたらうまく登録できるようになったのでですが、fields_forをまったくうまく活かせていません……。
#手動で置いて動いている例 <%= form.fields_for :choices do |c| %> <li> <label for="question_choices_attributes_0_choice">選択肢1</label> <input id="question_choices_attributes_0_choice" type="text" name="question[choices_attributes][0][choice]"> </li> <li> <label for="question_choices_attributes_1_choice">選択肢2</label> <input id="question_choices_attributes_1_choice" type="text" name="question[choices_attributes][1][choice]"> </li> <% end %>
Railsの仕様をうまく活かしてもっと綺麗に登録できる方法(書き方やGem)があれば知りたいです。
よろしくお願いします。
###補足情報
nested_form_fieldsというGemを使うと理想的な動きが出来そうなのですが、jQueryの使用をなるべく避けたいので導入躊躇しています。
http://www.virment.com/add_and_remove_rails_nested_form_dynamically/
###追加補足
Railsのバージョンは4.2.5です。
jQueryの利用を避けたいと言っておいてなんですが、
jquery-ujsの働きを考えるとRailsからjQueryを除外するってもしかしてかなり難しい事でしょうか?
あなたの回答
tips
プレビュー