これは何?
すごーく初歩的なことなのですが、あるファイル(便宜的に**「呼び出し元ファイル」**とします)のなかで、
- @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)
忘れがちなのでメモしました
Railsガイドでの記載はこちら(アドバイスありがとうございます!):
レイアウトとレンダリング - 3.4.5 コレクションをレンダリングする
TIPS
例えば、=render @comments
と書くと、自動的にRailsはcomments/_comment
のファイルを探しに行くので、呼び出し元ファイルがcommentsディレクトリになくても=render @comments
と書けば@commentを繰り返し呼びだすことができました。
つまり例えばposts#show
アクションのページで
posts/show.html.slim
= render @comments
と書いても、自動的にcomments/_comment
が呼び出されるという仕組み。すごいですね。