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

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

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

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

Ruby on Rails

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

解決済

1回答

1027閲覧

【rails増殖バグ?】編集ページで更新すると"フォームが増殖します”

mokosamejima

総合スコア11

Ruby on Rails 6

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

Ruby on Rails

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

0クリップ

投稿2021/09/20 07:18

概要

編集ページで追加可能なフォームを削除しても、データが残るといった現象が起きています。
さらに新しいデータを更新すると、前のデータと新しいデータの両方が残ってしまい、編集機能としての役割が果たしていません。

roadテーブルの中に、repetitionテーブルがあります。
roadのカラムが増殖することはありません。repetitionのカラムのみ、増殖?していると現状です。

「前回の分は更新しないように設定できれば解決するのでは?」と考えましたが、やり方がわかりません…困りました……

関係ありそうなコード

show

1~ 2<%# フォーム(repetitions)繰り返し %> 3 <h2>学習詳細</h2> 4<% @rooad.repetitions.each do |rooad|%> 5 <p>学習内容: <%= rooad.name %></p> 6 <p>学習期間: <%= rooad.period %>日</p> 7 <% if rooad.memo.present? %> 8 <p>一言メモ: <%= rooad.memo %></p> 9 <% end %> 10<% end %> 11~

edit

1<div class="rooad-post"> 2 <%= form_with(model: @rooad, local: true) do |f| %> 3<%= render 'shared/error_messages', model:@rooad %> 4<%# roadカラムの内容 %> 5 <div class="field"> 6 <%= f.label "タイトル" %><br /> 7 <%= f.text_field :title, placeholder: "例)エンジニア転職までの道のり" %> 8 </div> 9 <div class="field"> 10 <%= f.label "学習状況" %><br /> 11 <%= f.collection_select(:status_id, Status.all, :id, :name, {}, {class:"status-select"}) %> 12 </div> 13 14<%# /roadカラムの内容 %> 15 16<%# フォームの内容 %> 17 <div class="repetition"> 18 <div class="mx-auto"> 19 <%= f.fields_for :repetitions do |t| %> 20 <%= render "rooads/repetition_fields", f: t %> 21 <% end %> 22 </div> 23 24 <div id="detail-association-insertion-point"></div> 25 26 <div class="col-10 mx-auto mt-2"> 27 <%= link_to_add_association "+フォームを追加", f, :repetitions, 28 class: "btn btn-secondary btn-block", 29 data: { 30 association_insertion_node: '#detail-association-insertion-point', 31 association_insertion_method: 'after' 32 }%> 33 </div> 34 </div> 35<%# フォームの内容 %> 36 37<%# roadカラムの内容 %> 38<div class="field"> 39 <%= f.label "詳細(1,000文字以内)" %><br /> 40 <%= f.text_area :detail, placeholder: "例)1日平均8時間の学習をしました" %> 41 </div> 42<%# roadカラムの内容 %> 43 44<div class="sell-btn-contents"> 45 <%= f.submit "更新する" %> 46 <%=link_to 'もどる', rooads_path %> 47 </div> 48 <% end %> 49</div>

repetition

1<div class="nested-fields"> 2 <div class="row mx-auto"> 3 4 <div class="col-5"> 5 <%= f.label "学習内容(30文字まで)",class:"ko" %> 6 <%= f.text_field :name, class: "form-control", placeholder: "例)Progate/HTML&CSS" %> 7 </div> 8 9 <div class="col-5"> 10 <%= f.label "学習期間(半角数字・100日以内)",class:"ko" %> 11 <%= f.text_field :period, class: "form-control", placeholder: "例)12" %> 12 </div> 13 14 <div class="col-5"> 15 <%= f.label "一言メモ(30文字まで)",class:"ko" %> 16 <%= f.text_field :memo, class: "form-control", placeholder: "例)教材費1ヶ月1,000円" %> 17 </div> 18 19 <div class="offset-1 col-1 px-0 w-auto"> 20 <%= link_to_remove_association "削除", f, class: "btn btn-secondary btn-block" %> 21 </div> 22 23 </div> 24</div>

関係ないとは思いますが、フォームの内容も記載しておきます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

repetitionsについて、idをフォームに埋め込んでおかないと、「すでにある行を編集」だということが認識されず、毎回新規作成扱いとなります。

投稿2021/09/20 07:48

maisumakun

総合スコア146018

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

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

mokosamejima

2021/09/20 09:45

idが必要なんて、なんか不思議ですね。 言われた通りコントローラーのparamsに、idを加えるとうまくいけました。 勉強になります。ありがとうございました
maisumakun

2021/09/20 09:51

> idが必要なんて、なんか不思議ですね。 「どれを更新するか」特定するのにidが必要です。
mokosamejima

2021/09/20 09:56

そういうことですね! 確かに特定するには、idが必須ですね。 詳しく教えていただき、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問