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

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

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

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

Q&A

0回答

1758閲覧

【Rails】JSで増減するinputフォームに同じnameで保存したい

tm_rhcp

総合スコア17

Ruby on Rails

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

0グッド

0クリップ

投稿2016/02/13 09:44

編集2016/02/14 02:44

###前提・実現したいこと
選択肢の数が固定されていないアンケートシステムを作成しています。
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を除外するってもしかしてかなり難しい事でしょうか?

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問