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

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

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

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

Q&A

解決済

3回答

863閲覧

Railsでパラメーターを配列で送った場合の取得ができない

SeijiFukuda

総合スコア17

Ruby on Rails

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

0グッド

0クリップ

投稿2020/02/19 16:35

編集2020/02/21 17:26

Ruby on Railsで、インプットタグの数を変えることができるフォームを作っています。
配列でパラメーターを送信しDBに.newで書き込む処理を作りたいのですが、配列の取得がうまく出来ずeachによる繰り返しも思うように動いてくれません。

テーブル('price[p_tbl][]')の部分に関しては.joins(',')で取得した値をカンマ区切りで1つのフィールドに収めたいです。

動画

知識不足のため、拙いコードなのですが下記に現在の状態を載せております。
お手隙の方がいらっしゃいましたら、アドバイスを頂けると助かります。
よろしくお願い致します。

View

1 <div class="inner"> 2 3 <%= form_for(@price, url: {controller: 'hoge', action: 'new' }) do |form| %> 4 5 <div class="box p20"> 6 <div class="btn-close"><span></span></div> 7 <div class="groop input-box"> 8 <p class="fs-m">料金名</p> 9 <%= text_field_tag 'price[p_ttl][]', "", {class: "l", placeholder: "例:レッスン料(月謝)"} %> 10 </div> 11 12 <div class="groop input-box"> 13 <p class="fs-m">料金説明</p> 14 <%= text_field_tag 'price[p_cont][]', "", {class: "l", placeholder: "説明文"} %> 15 </div> 16 17 <div class="groop input-box bd-none"> 18 <p class="fs-m">料金表</p> 19 <table class="price-tbl"> 20 <tr> 21 <td> 22 <%= text_field_tag 'price[p_tbl][]', "", {class: "w100", placeholder: "タイトル"} %> 23 </td> 24 <td> 25 <%= text_field_tag 'price[p_tbl][]', "", {class: "w100", placeholder: "¥0"} %> 26 <i class="icon remove"></i> 27 </td> 28 </tr> 29 </table> 30 </div> 31 32 <p id="price-btn" class="flex3 w100"><i class="icon add"></i>行を追加する</p> 33 34 </div> 35 36 <div class="add-box"> 37 <p class="flex3 w100"><i class="icon add"></i>新しいテーブルを追加</p> 38 </div> 39 40 <div class="center"> 41 <button class="w40 smh-w60 btn1 mt30"> 42 <%= form.submit "この内容で保存" %> 43 </button> 44 </div> 45 </div> 46  <% end %>

controller

1 def price 2 @price = Price.new 3 end 4 5 def price_new 6 @price = params[:price] 7 @price.each do |i| 8 @price = Price.new( 9 p_ttl: params[:p_ttl], 10 p_cont: params[:p_cont], 11 p_tbl: params[:p_tbl].joins(',') 12 ) 13 @price.save 14 end 15 redirect_to("/") 16 end

追記

下記のような動的に追加できるフォームを配列で送る際に

html

1<div> 2 <%= text_field_tag "hoge[hash1][name][]" %> 3 <%= text_field_tag "hoge[hash1][tag][]" %> 4</div> 5<button>追加ボタン</button>

Parameters

1hoge = { 2 "hash1" => { name: "名前1", tag: "タグ1" }, 3 "hash2" => { name: "名前2", tag: "タグ2" }, 4 "hash3" => { name: "名前3", tag: "タグ3" }, 5} 6 7もしくは、 8 9hoge = { 10 "hash1" => { "name" => "名前1", "tag" => "タグ1" }, 11 "hash2" => { "name" => "名前2", "tag" => "タグ2" }, 12 "hash3" => { "name" => "名前3", "tag" => "タグ3" }, 13}

このような形で送ることが出来れば、1件ずつの書き込みに成功しそうです。
どなたか、お分かりになられる方おりましたらご教示ください。
よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

自己解決

jsで各配列を作成し、順番に書き込むことで解決しました。

controller

1hoge_hash = params[:hoge] 2hoge_hash.each do |key, value| 3hoge = Hoge.new( 4 hoge1: "#{value[:hoge1].join}", 5 hoge2: "#{value[:hoge2].join}", 6 hoge2: "#{value[:hoge3].join}" 7 ) 8hoge.save

投稿2020/02/22 02:51

SeijiFukuda

総合スコア17

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

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

0

@price = params[:price] @price.each do |i| @price = Price.new( p_ttl: params[:p_ttl], p_cont: params[:p_cont], p_tbl: params[:p_tbl].joins(',') ) @price.save end

@priceが違う目的で使われているのでこれ壊れるかも。

price = params[:price] price.each do |i|

ここは@なしにしておきましょう
loopの中の@priceもインスタンス変数にする意味はないと思うのだが、、、

投稿2020/02/20 02:00

winterboum

総合スコア23324

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

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

0

配列の連結はjoinsではなくjoinです(るりま)。

投稿2020/02/19 22:39

maisumakun

総合スコア145183

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問