0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】renderメソッド使用時のMissing partialエラーの対応など

Posted at

はじめに

部分テンプレート使用時に注意したい点を備忘録としてまとめます。

ActionView::Template::Error (Missing partial)の対応

エラー内容

mm/hoge/index.html.erb
<%= render 'registration' %>
ActionView::Template::Error (Missing partial mm/hoge/registration, base/fuga/registration, application/registration with {:locale=>[:ja, :en], :formats=>[:js, :html, :text, :css, :ics, :csv, :vcf, :vtt, :png, :jpeg, :gif, :bmp, :tiff, :svg, :mpeg, :mp3, :ogg, :m4a, :webm, :mp4, :otf, :ttf, :woff, :woff2, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip, :gzip], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :jbuilder]}. Searched in: ....

原因

  • renderメソッドを書いたビューファイル「mm/hoge/index.html.erb」と部分テンプレート「mm/fuga/_registration.html.erb」が別のディレクトリにあるため

解決法

  • app/views以下のパスを書く
- <%= render 'registration' %>
+ <%= render 'mm/fuga/registration' %>

以下の書き方はすべて同じファイルを呼び出す

  • UsersControllerクラスのupdateアクション実行に失敗し、editテンプレートをレンダリングする場合
  • すべてviews/usersディレクトリのedit.html.erbがレンダリングされる
render :edit
render action: :edit
render "edit"
render action: "edit"
render "users/edit"
render template: "users/edit"

partialは省略可能だが、locals などの追加オプションも渡す場合は省略できない

# 基本の使い方
render 'ファイル名', 部分テンプレートで使う変数: 変数に入れる値

# OK
render 'registration', user: @user, index: @index
render partial: 'registration', locals: { user: @user, index: @index }

# NG
render 'registration', locals: { user: @user, index: @index }

部分テンプレートファイル名のアンダースコア(_)は呼び出し時は省略する

「_registration.html.erb」ファイルを呼び出す場合

render 'registration' # 同じディレクトリにある場合 
render 'books/registration' # 別のディレクトリにある場合
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?