Rails如何呈现变量

时间:2017-01-16 13:17:13

标签: ruby-on-rails refactoring ruby-on-rails-5 renderpartial

简单示例:

index.html.erb:

<% @posts.each do |post| %>
 <%= post.title %>
<% end %>

我可以重构此内容并将内容移至 _post.html.erb 部分:

index.html.erb:

<%= render @posts %>

_post.html.erb:

 <%= post.title %>

那么Rails如何在不创建块的情况下传递每个帖子的属性? 我的posts_controller索引操作只定义了@posts = Post.all

我认为可能是部分(post)的名称,但看起来像是另一个Rails约定(复数和单数命名)。是吗?

非常感谢分享!

1 个答案:

答案 0 :(得分:4)

Rails通过查看集合中的模型名称来确定要使用的partial的名称。呈现集合的完整语法如下:

<%= render partial: "post", collection: @posts %>

但是有一个简写:

<%= render @posts %>

根据文件:

  

当使用复数集合调用partial时,则   部分的个别实例可以访问该成员   通过以partial命名的变量呈现的集合。在   这种情况下,部分是_post,在_post部分内,你可以   引用post来获取正在呈现的实例。

您可以在rails guides

中找到详细说明