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

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

詳細はこちら
Ruby on Rails

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

Q&A

解決済

1回答

7794閲覧

ActionView::MissingTemplateエラーについて(renderメソッドが上手くいかない)

mayuphoo

総合スコア13

Ruby on Rails

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

0グッド

1クリップ

投稿2021/01/17 12:30

編集2021/01/17 12:59

前提・実現したいこと

Ruby on Railsで簡単な投稿サイトを作っています。
ユーザー詳細ページに遷移した際、そのユーザーが投稿した内容の一覧が表示されるように実装していたところ、エラーが出てしまいました。

エラーメッセージ

Error

1ActionView::MissingTemplate in Users#show 2Showing /Users/mayu/projects/protospace-30336/app/views/users/show.html.erb where line #31 raised: 3 4Missing partial users/_prototype, application/_prototype with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :jbuilder]}. Searched in: 5 * "/Users/mayu/projects/protospace-30336/app/views" 6 7 8### 該当のソースコード 9Extracted source (around line #31): 10 11 </h2> 12 <div class="user__card"> 13#31=> <%= render partial: 'prototype', collection: @prototypes, locals: {prototype: @prototype}%> 14 </div> 15 </div> 16 </div> 17

●routes.rb

Rails.application.routes.draw do devise_for :users root to: "prototypes#index" resources :prototypes, only: [:new, :create, :show, :edit, :update, :destroy] do resources :comments, only: :create end resources :users, only: :show end

●users_controller.rb

class UsersController < ApplicationController def show @user = User.find(params[:id]) @prototypes = @user.prototypes end end

●show.html.erb

<div class="main"> <div class="inner"> <div class="user__wrapper"> <h2 class="page-heading"> <%= "#{@user.name}さんの情報"%> </h2> <table class="table"> <tbody> <tr> <th class="table__col1">名前</th> <td class="table__col2"><%= @user.name %></td> </tr> <tr> <th class="table__col1">プロフィール</th> <td class="table__col2"><%= @user.profile %></td> </tr> <tr> <th class="table__col1">所属</th> <td class="table__col2"><%= @user.occupation %></td> </tr> <tr> <th class="table__col1">役職</th> <td class="table__col2"><%= @user.position %></td> </tr> </tbody> </table> <h2 class="page-heading"> <%= "#{@user.name}さんのプロトタイプ"%> </h2> <div class="user__card"> <%= render partial: 'prototype', collection: @prototypes %> </div> </div> </div> </div>

●_prototype.html.erb

<div class="card"> <%= link_to image_tag(prototype.image, class: :card__img ), prototype_path(prototype.id) %> <div class="card__body"> <%= link_to prototype.title, prototype_path(prototype.id), method: :get, class: :card__title %> <p class="card__summary"> <%= prototype.catch_copy %> </p> <%= link_to prototype.user.name, user_path(prototype.user_id), class: :card__user %> </div> </div>

補足情報

show.html.erbのrenderメソッドにて、_prototype.html.erbのテンプレートファイルがうまく呼び出せていないのが原因だと思うのですが、変数の定義などを見てもどこが問題なのか分からず困っています…。
どなたかご回答いただけると、助かります。
宜しくお願いします。

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

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

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

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

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

guest

回答1

0

自己解決

users#show によって呼び出された、show.html.erb内の

<%= render partial: "prototype", collection: @prototypes %>

↑"prototype"の記述が間違っていました。

今回参照しようとしていたビューファイルは、prototypesコントローラーという、usersコントローラーとは別のコントローラーのディレクトリにあるものでした。

よって、

<%= render partial: "prototypes/prototype", collection: @prototypes %>

の記述が正解だったようです。

render partial: "該当ファイルのあるディレクトリ名/該当ビューファイル名"

ということです。

1つのテンプレートビューファイルを、様々なコントローラーのビューに活用している際は要注意!!

投稿2021/01/17 13:12

mayuphoo

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問