当前位置:  开发笔记 > 编程语言 > 正文

ruby-on-rails:在列表中的每个项目上呈现部分内容

如何解决《ruby-on-rails:在列表中的每个项目上呈现部分内容》经验,为你挑选了2个好方法。

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

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

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

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

posts_show部分具有以下内容:

....
<%=h @post.title %> 

但是我收到以下错误

You have a nil object when you didn't expect it!
The error occurred while evaluating nil.title

有任何想法吗?



1> EmFi..:

您还可以使用:collection for render:partial来简单地处理事情.将值中的每个项目传递给:集合到共享部分名称的局部变量.

<% @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.如果你将partial重命名为传统的_post.html.erb,那么你可以简单地执行:

<%= render :partial => @posts %>

这将为@posts变量中的每个帖子呈现部分.



2> Mato..:

由于每个循环中的post变量是一个locale变量,因此必须使其可用于partial:

<%= render :partial => "posts/post_show", :locals => {:post => post} %>

然后,您可以通过本地变量帖子访问标题:

<%=h post.title %> 

您还可以通过将帖子呈现为集合来简化整个过程.有关更多信息,请查看Rails文档:

http://api.rubyonrails.org/classes/ActionController/Base.html#M000658

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有