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

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

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

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

Ruby

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

Q&A

1回答

2721閲覧

【Rails】動的にフォームを追加したい

yastinbieber

総合スコア49

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2020/05/12 12:57

編集2020/05/15 08:33

実現したいこと

Railsにて動的フォームを実装したいです
ネストしたモデルの追加の仕方はいくつも記事が上がっているのですが、ネストしない場合のフォームの追加方法がわかりません。

イメージ説明

この追加ボタン(赤枠部分)を押下することでカラムを動的に追加したいです。

下のコードを元にいうと、
追加ボタンを押下し、

<td><%= f.text_field :menu, placeholder: "menu", class: 'input form-control' %></td> <td><%= f.text_field :menu, placeholder: "settype", class: 'input form-control' %></td> <td><%= f.text_field :menu, placeholder: "weight", class: 'input form-control' %></td> <td><%= f.text_field :menu, placeholder: "reps", class: 'input form-control' %></td>

彼らを都度増やしていきたいと考えております。

全体コード

rails

1<%= form_for(@workoutmenu) do |f| %> 2 <tbody> 3 <tr> 4 <th>menu</th> 5 <th>settype</th> 6 <th>weight</th> 7 <th>reps</th> 8 </tr><br> 9 <td><%= f.text_field :menu, placeholder: "menu", class: 'input form-control' %></td> 10 <td><%= f.text_field :menu, placeholder: "settype", class: 'input form-control' %></td> 11 <td><%= f.text_field :menu, placeholder: "weight", class: 'input form-control' %></td> 12 <td><%= f.text_field :menu, placeholder: "reps", class: 'input form-control' %></td> 13 <br><%= f.submit "送信", class: "btn" %> 14 </tbody> 15<% end %>

どなたかご教授いただけますと幸いです。
よろしくお願いいたします。

追記

rails

1<%= form_for @workoutmenu do |f| %> 2 <table> 3 <thead> 4 <tr> 5 <th>menu</th> 6 <th>settype</th> 7 <th>weight</th> 8 <th>reps</th> 9 </tr><br> 10 <tbody class='add_menu_area'> 11 <%= f.text_field :menu, placeholder: "menu",name: "workoutmenu[#{menu.id}][menu]" %> 12 <%= f.select :settype, ['normalset', 'superset', 'dropset', 'giantset'],name: "workoutmenu[#{settype.id}][settype]" %> 13 <%= f.text_field :weight, placeholder: "weight",name: "workoutmenu[#{weight.id}][weight]" %> 14 <%= f.text_field :reps, placeholder: "reps",name: "workoutmenu[#{reps.id}][reps]" %> 15 </tbody> 16 </table> 17 <%= submit %> 18<% end %>

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

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

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

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

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

winterboum

2020/05/12 20:59

テーブルを動的に追加 とは <table>を増やすのですか? <tr>を増やすのですか?<th><td>を増やすのですか?
yastinbieber

2020/05/13 01:25

ご返信ありがとうございます。 希望としては   <td><%= f.text_field :menu, placeholder: "menu", class: 'input form-control' %></td> <td><%= f.text_field :menu, placeholder: "settype", class: 'input form-control' %></td> <td><%= f.text_field :menu, placeholder: "weight", class: 'input form-control' %></td> <td><%= f.text_field :menu, placeholder: "reps", class: 'input form-control' %></td> の部分を動的に増やしていきたいと考えております。 何卒よろしくお願いいたします。
winterboum

2020/05/15 07:14

ん? それ全体を<tr>で囲んで、<tr>を増やすって意味ですね? あら、よく見たら、trなしですね。 で、 このままtd達をふやしても、みなnameがおなじなので、最後の一組しかparamsに入りません。 大改造になりますね。。。
yastinbieber

2020/05/15 07:18

失礼いたしました。。 <td><%= f.text_field :menu, placeholder: "menu", class: 'input form-control' %></td> <td><%= f.text_field :settype, placeholder: "settype", class: 'input form-control' %></td> <td><%= f.text_field :weight, placeholder: "weight", class: 'input form-control' %></td> <td><%= f.text_field :reps, placeholder: "reps", class: 'input form-control' %></td> 上記になります。 囲っている<td>などあるサイトに書いてあったので記載しているのですがあまりよく理解しておりません。。 要は上記を動的に増やすことができれば問題ありません。
winterboum

2020/05/15 09:07

うまくいなない というのは、「どうなってほしいのにどうなった」と表現するとどうなります? あと。partialでと回答しているのですがそうなってないですね
yastinbieber

2020/05/15 10:56

どうなって欲しいのにどうなったの部分でいうと、 カラムらが追加されて欲しいのにエラーが出てしまったが表現としては正しいです。 そもそも先ほども書かせていただいたとおり、ご教授いただいた内容に理解が追いついていない状況です。 そのため、partialの部分もよくわかっていません。 もし可能でしたらコードをご教授いただけますと幸いです。
guest

回答1

0

最終的には(面倒だから閉じる</>は省略しますので実際にやるときは忘れないで

<table> <thead> <tr> <th>..... <tbody class='add_menu_area'> <%= tr を書き出すparcial locals: {menu_id: IDにありえないだろう整数} %> </table> <%= submit %>

にし、tbody.add_menu_area に trを書き出すparcialをprependします。
そのとき、全trのnameが異なるる様にします。たとえば<%= f.text_field :menu, placeholder: "reps",
<%= f.text_field :reps, placeholder: "reps",name: "workoutmenu[#{menu_id}][reps]"
なお

全部 f.text_field :menu になってますが、column名にしてね

IDにありえないだろう整数 は Time.now.to_i あたりで
=============

というコメントでどこまでできますか?
(createもいろいろあるのでまずviewだけ)

投稿2020/05/15 07:34

winterboum

総合スコア23347

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

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

yastinbieber

2020/05/15 08:35

ありがとうございます。 ですが正直わからない部分が多くて… 言われたことを元に追記してみましたがうまくいきません。 そもそもmenu_idたるものは作成していないのですが作成するのでしょうか。 また >IDにありえないだろう整数 は Time.now.to_i あたりで 上記もちんぷんかんぷんです… 恐れ入りますが再度ご教示いただけますと幸いです。
winterboum

2020/05/15 13:43

この課題今の貴方には無理です。 1)入力エリア一組で、入力、save、表示ができる 2)入力エリア2組で、両方が入力、save、表示ができる が出来るようになってから再挑戦してください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問