LoginSignup
3
1

More than 3 years have passed since last update.

= render @collection を忘れがちなのでメモを残しておく

Last updated at Posted at 2021-01-09

これは何?

すごーく初歩的なことなのですが、あるファイル(便宜的に「呼び出し元ファイル」とします)のなかで、

- @comments.each do |comment|
   = render 'comment', comment: comment

上記の様に書いて、_commentのパーシャルの中では

_comment.html.slim
= comment.body

とかで「コメント一覧」を表示するのはよくあると思います。
この時、呼び出し元ファイルの方で、

= render @comments

とシンプルに1行で書いても同じ結果が得られます。
ただし、条件が2つあリます。

  • パーシャルのファイル名が渡しているコレクション名の単数形である
  • そのパーシャルはコレクション名と同じ名前のビューのディレクトリ内にある

つまり、この組み合わせはOKで、(それぞれ、下段は呼び出したいパーシャル名)

= render @messages
# messages/_message

= render @comments
# comments/_comment

この組み合わせはダメ。(下段同じ)

= render @messages
# messages/_messages (複数形)

= render @comments
# posts/_comment (ディレクトリがNG)

忘れがちなのでメモしました:relaxed:

Railsガイドでの記載はこちら(アドバイスありがとうございます!):
レイアウトとレンダリング - 3.4.5 コレクションをレンダリングする

TIPS

例えば、=render @commentsと書くと、自動的にRailsはcomments/_commentのファイルを探しに行くので、呼び出し元ファイルがcommentsディレクトリになくても=render @commentsと書けば@commentを繰り返し呼びだすことができました。

つまり例えばposts#showアクションのページで

posts/show.html.slim
 = render @comments

と書いても、自動的にcomments/_commentが呼び出されるという仕組み。すごいですね。:grinning:

3
1
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
3
1