🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails 5

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

Q&A

1回答

809閲覧

Form内で以前に入力した内容が毎回表示されてしまう

NM4869

総合スコア9

Ruby on Rails 5

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

0グッド

0クリップ

投稿2019/12/11 04:37

現在授業に評価を残せるようなウェブサイトをrailsで作っているのですが、form_fields_forを使い各授業に評価を残そうとしたところ以前に入力した評価が毎回表示されてしまいます。試した解決策としてはuserクラスを作りadminユーザーとそうでないユーザーの時で処理を分けようとしましたがそれでも以前に入力したフォームの内容が毎回表示されてしまいます。何卒お力添えお願いします。

以下の写真がUIの部分の実行画像です。
イメージ説明
イメージ説明

問題の_form partialがこちらになります。reviews_contentの部分が以前に入力したものが毎回表示されてしまいます。

rails

1<%= render 'shared/errors', obj: @course %> 2 3<div class = "row"> 4 <div class = "col-xs-12"> 5 <%= form_with( model: @course, local: true, class: "form-horizontal") do |f| %> 6 7 <% if current_user.admin? %> 8 <div class = "form-group"> 9 <div class = "control-label col-sm-2"> 10 <%= f.label :coursename %> 11 </div> 12 13 <div class = "col-sm-8"> 14 <%= f.text_field :coursename, class: "form-control", placeholder: "Name of class", autofocus: true %> 15 </div> 16 </div> 17 18 <% else %> 19 <div class="form-group"> 20 <%= f.fields_for :reviews do |rf| %> 21 <hr> 22 <div class = "control-label col-sm-2"> 23 <%= rf.label :reviews %> 24 </div> 25 <div class = "col-sm-8"> 26 <%= rf.text_field :reviews_content, class: "form-control", placeholder: "Leave the reviews", autofocus: true %> 27 </div> 28 <hr> 29 <% end %> 30 </div> 31 <% end %> 32 33 <div class = "form-group center"> 34 <div class = "col-sm-offset-5 col-sm-10"> 35 <%= f.submit class: 'btn btn-danger btn-lg' %> 36 </div> 37 </div> 38 39 <% end %> 40 <div class = "col-xs-4 col-xs-offset-4"> 41 [ <%= link_to "Cancel request and return to courses listing", courses_path %> ] 42 </div> 43 </div> 44</div>

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

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

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

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

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

guest

回答1

0

おそらくviewの問題ではなくcontrollerの問題です。
前の値が表示される、というのは @course を new で作らずに Couseから取り込んで居るのではないですか?
その場合入力済みのデータが表示されるのは機能です。

どういう時に空の画面を出すのか、というのはアプリの仕様になりますが、その場合は@courseにnewで作ったものを入れて下さい

投稿2019/12/11 05:08

winterboum

総合スコア23567

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

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

NM4869

2019/12/11 08:18

ご返信ありがとうございます!Course.newで作ることによって同じ値が表示されてしまう不具合は直せました。Course.idのみを前のviewから引き継ぎたくてこのようにして受け取りたいのですが2行目のid取得の部分が機能していないのですが、newで作成した後にparamsで部分的にcourseのカラムを受け取ることはできないのでしょうか? @course = Course.new @course.id = Course.find(params[:id]) @course.reviews.build
winterboum

2019/12/11 09:19

引き継ぎたいcourse = データを取込み @cource = course.new(引き継ぎたいcourseから引き継ぎたい項目だけ取り出す) ってして下さい ()内はHashの形式で
NM4869

2019/12/11 11:37

引き継ぎたいcourse = データを読み込みの部分ですが、これはviewにてlink_toの時に渡すのかそれとも全てcourses_controller.rb内で行わなければいけないのでしょうか? またHashの形式でとあるのですが、@course = Course.new(:id) または @course = Course.new(params[:id])のような形式でしょうか?質問が多くなってしまい、申し訳ありません。宜しくお願いします。
winterboum

2019/12/11 14:50

例えば name、roomを引き継ぎたいとしたら course=Course.find(ここに適切なのを) @course = Couse.new(name: course.name, room: course.room) というように
NM4869

2019/12/12 02:08 編集

無事にcourseテーブルの値を受け継ぐことができました。ありがとうございます。しかし、他のテーブルの値を引き継ごうとした場合に文法の問題なのかうまく引き継ぐことができませんでした。以下のようにreviewsテーブルの値も引き継ごうとしています。courseは多数のreviewsを持っていて、nested_attributes_forの記載もcourse_controllerに記載しており、他の関数では無事にreviews_contentを受け取れているのですが。宜しくお願いします。 course = Course.find(params[:id]) reviews = Review.where(course_id: params[:id]) @course = Course.new(coursename: course.coursename, reviews_attributes: reviews.reviews_content) @course.save @course.reviews.build
winterboum

2019/12/12 03:38

レビューってcouseごとに数が違うでしょ? そこどうするの?
NM4869

2019/12/12 07:45

今はcourseからreviewテーブルの値も使おうとしているのですが、どこでどう表示させるのがいいなどもう少し検討してみます。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問