ruby-on-rails:在列表中的每个项目上渲染部分

标签 ruby-on-rails

我在 View (.html.erb) 中有以下内容:

<% @posts = GetAllPostsFunctions %>   (removed for berivity)

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

<%= render :partial => "posts/post_show" %>
<% end %>

post_show 部分具有以下内容:
....
<td><%=h @post.title %> </td>

但我收到以下错误
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.title

有任何想法吗?

最佳答案

你也可以简单地使用 :collection 来渲染 :partial。将 :collection 值中的每个项目传递给共享部分名称的局部变量。

<% @posts = GetAllPostsFunctions %>   (removed for berivity)

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

在这种情况下,Rails 将为 @posts 中的每个项目呈现 post_show,并将局部变量 post_show 设置为当前项目。它还提供了方便的计数器方法。

成功使用这种方法需要将 app/views/posts/_post_show.html.erb 部分重命名为 app/views/posts/_post.html.erb 或将您的部分中每次出现的帖子更改为 post_show。如果您将部分重命名为传统的 _post.html.erb,那么您只需执行以下操作:
<%= render :partial => @posts %>

这将呈现 @posts 中每个帖子的部分内容多变的。

关于ruby-on-rails:在列表中的每个项目上渲染部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1540062/

相关文章:

ruby-on-rails - Rails 4 Devise 重新激活 "soft deleted"帐户

ruby-on-rails - 使用 Susnpot Gem 进行 Solr 搜索

ruby-on-rails - 当您的数据库架构发生变化时处理旧版本移动应用程序的正确方法

ruby-on-rails - 序数解析问题

ruby-on-rails - form_for 但要发布到不同的操作

ruby-on-rails - ruby 错误 : "No such file or directory -- script/generate (LoadError)"

ruby-on-rails - 从另一个 View 渲染一个 View

ruby-on-rails - Rails 3 validate_with 抛出 ArgumentError : wrong number of arguments

ruby-on-rails - ruby on rails 的内部结构

ruby-on-rails - 几乎没有踪迹的神秘 rails 错误