It's a very rudimentary thing, but in a certain file (for convenience, ** "caller file" **)
- @comments.each do |comment|
= render 'comment', comment: comment
Write as above, in the _comment
partial
slim:_comment.html.slim
= comment.body
I think it is common to display a "comment list". At this time, the calling file
= render @comments
You can get the same result by simply writing in one line. However, there are two conditions.
--The partial ** file name is the singular form of the collection name passed ** --The partial is ** in the view directory with the same name as the collection name **
In other words, this combination is OK (the lower row is the partial name you want to call)
= render @messages
# messages/_message
= render @comments
# comments/_comment
This combination is useless. (Same as the bottom)
= render @messages
# messages/_messages (Plural form)
= render @comments
# posts/_comment (Directory is NG)
I made a note because it's easy to forget: relaxed:
Click here for the description in the Rails guide (Thank you for your advice!): Layout and Rendering --- 3.4.5 Render Collection (https://railsguides.jp/layouts_and_rendering.html#%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E3%83%AC%E3%83%B3%E3%83%80%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B)
TIPS
For example, if you write = render @ comments
, Rails will automatically look for the file in comments/_comment
, so ** even if the calling file is not in the comments directory ** = render @ comments
I was able to call @comment repeatedly.
So, for example, on the posts # show
action page
slim:posts/show.html.slim
= render @comments
Even if you write, comments/_comment
is called automatically. It's amazing. : grinning:
Recommended Posts