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

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

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

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Ruby on Rails

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

Q&A

1回答

936閲覧

Rails 部分テンプレート 他コントローラーのビュー表示(userコントローラ)

yastinbieber

総合スコア49

Ruby

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/04/08 06:43

編集2020/04/11 05:56

実現したいこと

Railsで部分テンプレートを使い、他コントローラのビューを表示したいです。

具体的には

productsコントローラのshowビューファイルをuserコントローラのshowビューファイル中で表示したいです。
イメージとしては、自身が投稿したレビューをusers/show.html.erbに陳列する形です。

##該当のソースコード

##products/show.html.erb <% @products.each do |review| %> <%= render partial: "product", locals: { product: @product, review: review } %> <% end %>
##products/_product.html.erb <div class="review-detail"> <div class="review-detail-item"> <div class="username"> <a class="user-page" href="/users/<%= review.user_id %>">@<%= review.user.nickname %></a> <p class="text-small"> <% if review.comments.present? %> <span>@<%= review.user.nickname %>のレビューに対しての平均評価:</span> <span class="rating-star"> <i class="star-actived rate-<%= review.comments.average(:rate).round %>0"></i> </span> <% else %> <span>@<%= review.user.nickname %>のレビューに対しての平均評価:</span> <span class="rating-star"> <i class="star-actived rate-0"></i> </span> <% end %> </p> </div> <div class="write-review"> <h3><span class="product-btn">title:<%= product.bookname %></span></h3> </div> <div class="review-1"> <br><p><%= truncate(review.review, length: 10) do %></p> <% end %> </div> </div> <%= link_to 'レビュー詳細', "/products/#{product.id}/reviews/#{review.id}", method: :get, class: "right-btn-review-detail" %> </div>

上記内容を下記(users/show.html.erb)のeach文の間に設定したいです。

##users/show.html.erb <% @users.each do |review| %> <ーーここにーー> <% end %>

念の為usersコントローラも載せておきます。

##users_controller class UsersController < ApplicationController def show @user = User.find(params[:id]) @nickname = @user.nickname @users = current_user.reviews.page(params[:page]).per(3) end end

試したこと

<% @users.each do |review| %> <%= render partial: "products/show", locals: { product: @product, review: review } %> <% end %>

このようなエラーが出てしまいました。
https://gyazo.com/586d83de03b84db3e727815de751cac0

:as => "review"を最後尾に加えたりもしましたが、SyntaxErrorが出ます。。

どなたかうまくいく方法をご教示いただけますと幸いです。

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

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

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

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

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

guest

回答1

0

@productって定義しましたか?

投稿2020/04/15 12:59

chocolate24

総合スコア125

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

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

yastinbieber

2020/04/15 13:21

お返事ありがとうございます。 反映元のproducts_showでは def show @product = Product.find(params[:id]) @products = @product.reviews.page(params[:page]).per(3).order("created_at DESC") end のように定義しておりますが、反映したいusers_showページには定義していない状態です。 一度@product = Product.find(params[:id])のような形でusers_controllerのshowの箇所に記載しましたがエラーが出てしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問