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

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

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

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

Q&A

解決済

1回答

2319閲覧

ruby on rails, view内で他のモデルの値を表示したいが、アドレスが表示されてしまう

NM4869

総合スコア9

Ruby on Rails 5

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

0グッド

1クリップ

投稿2019/12/10 06:42

courses, reviewsテーブルがあり、nested_attributes_forでcourseコントローラーから受け取ったreviewsテーブルの値をcourse/showで表示しようとしているのですが、実際の値ではなくアドレスが表示されてしまいます。collection_boxや、instance_variables_getなどをコントローラー内から試してみましたがそのメソッドはインスタンス変数に対して使えませんでした。何卒お力添えお願いします。

Tips from other studentsの部分をアドレスではなく実際のreviewsテーブルのカラムの実際の値を表示しようとしていますが、どうしてもアドレスになってしまいます。
イメージ説明

course/show.html.erbで表示している箇所の内容

rails

1 2<div class = "col-md-7"> 3 <h2>Tips from other students</h2> 4 <%= form_with( model: @course, local: true, class: "col-md-7") do |f| %> 5 <% f.fields_for :reviews do |rf| %> 6 <ul class="nav nav-tabs nav-stacked col-md-12 col-lg-12 col-sm-12 well ng-scope" ng-repeat="tip in $ctrl.displayCourse.tips track by $index"> 7 <li class="ng-binding"><%= rf.select :reviews_content, @reviews %></span></li> 8 </ul> 9 <% end %> 10 <% end %> 11</div>

courses_controller.rb

rails

1class CoursesController < ApplicationController 2 before_action :set_course, only: [:edit, :update, :show, :destroy] 3 4 def index 5 @courses = Course.all 6 @reviews = Review.all 7 end 8 9 def new 10 @course = Course.new 11 @course.reviews.build 12 end 13 14 def create 15 @course = Course.new(course_params) 16 @course.save 17 if @course.save 18 flash[:success] = "New course has created" 19 redirect_to course_path(@course) 20 else 21 render 'new' 22 end 23 end 24 25 def show 26 @reviews = Review.where(course_id: params[:id]) 27 end 28 29 def destroy 30 @course = Course.find(params[:id]) 31 @course.destroy 32 33 flash[:danger] = "Course was deleted" 34 redirect_to courses_path 35 end 36 37 def edit 38 #@course = Course.find(params[:id]) 39 end 40 41 def update 42 #@course = Course.find(params[:id]) 43 if @course.update(course_params) 44 flash[:success] = "Course was updated with reviews" 45 redirect_to course_path(@course) 46 else 47 render 'edit' 48 end 49 end 50 51 private 52 def set_course 53 @course = Course.find(params[:id]) 54 end 55 56 def course_params 57 params.require(:course).permit(:coursename, :course_content, :prerequisite, :proctoredexams, :groupwork, :textbook, reviews_attributes: [:reviews_content]) 58 end 59 60 def review_params 61 params.require(:course).permit(reviews_attributes: [:reviews_content]) 62 end 63end

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

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

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

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

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

guest

回答1

0

ベストアンサー

それはアドレスではなく Reviewインスタンスの(たぶん)object_idです。
なぜそうなるか、@review とインスタンスそのものを渡しているからです
reviewの何を表示したいのでしょう? 例えば @review.content の様に表示したいカラム名をつけて下さい

投稿2019/12/10 12:12

winterboum

総合スコア23347

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

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

NM4869

2019/12/10 14:01

以下のように@reviews.reviews_contentとしてもundefined method `reviews_content' for #<Review::ActiveRecord_Relation:0x00007ff23bdf0c48>となってしまうのですが、これはreviewsテーブルの値はcourseなど他のテーブルのviewからは表示できないということでしょうか? <div class = "col-md-7"> <h2>Tips from other students</h2> <%= form_with( model: @course, local: true, class: "col-md-7") do |f| %> <% f.fields_for :reviews do |rf| %> <ul class="nav nav-tabs nav-stacked col-md-12 col-lg-12 col-sm-12 well ng-scope" ng-repeat="tip in $ctrl.displayCourse.tips track by $index"> <li class="ng-binding"><%= @reviews.reviews_content %></span></li> </ul> <% end %> <% end %> </div>
winterboum

2019/12/10 20:24

@reviewsはReviewのインスタンスではなくその配列(のようなもの)です。 それには reviews_content などないでしょう。 @reviewsの中身ごとに reviews_contentを表示させるようにせんと。 @reviews.reviews_content を rf.object.reviews_content にしてください
NM4869

2019/12/11 01:48

rf.object.reviews_contentで無事に表示できました。有難うございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問