我试图渲染不同对象的集合,每个对象的格式都相同。我想保持干燥,所以我想使用偏色和partial layouts。Rails 3和局部布局
编辑 - 简要说明:我需要的不是在所有发布页面上显示通用项目,而是在每个项目上显示通用属性/字段。这就是为什么我需要部分布局,例如部分布局,而不是页面布局。
我有不同对象的集合:
@publications = Publications.all
# Publication is the parent class
# @publications = [ImagePost, VideoPost, TextPost, ...]
我想呈现列表中的所有出版物。每个出版物都有一些共同的属性:作者,日期,...我想把这个属性放在局部布局。
在我看来因此,渲染收藏,我做的:
<%= render :partial => 'publications', :locals => {:publications => @publications} %>
在第一级部分views/publications/_publications.html.erb
,我圈上的项目,并尝试呈现在它的部分,并与公共部分的每个项目布局:
<ul class='publications_list'>
<% publications.each do |p| %>
<%= render p, :layout => 'publications/publication_layout' %>
<% end %>
</ul>
的局部布局,views/publications/_publication_layout.html.erb
:
<li>
<h2><%= link_to publication.title, publication %></h2>
... Other common properties that I want to display on each item, independently of its type ...
<p><%= yield %></p>
</li>
最后,对于每种对象类型,我都有一个部分(例如, image_posts/_image_post.html.erb
等)包含代码以正确显示每个。
我的问题:我没有设法渲染每个出版物的公共局部布局publication_layout
。这个布局简单地被rails忽略。每个项目都被正确呈现,但没有包含公共属性和<li>
标记的这种布局。
任何关于为什么我的局部布局被忽略的建议?
你有没有试过指定:局部直接,作为指南中提出? _“还要注意,在传递其他选项(例如:layout)时需要显式指定:partial。”_。 – 2012-02-29 13:59:18
有关扩展文档,请参阅[apidoc](http://apidock.com/rails/ActionView/Partials)。 – 2012-02-29 14:04:49
好吧,这可以解释整个事情......这种行为真的很奇怪,并不直观。由于* polymorphic *集合(部分取决于'p'的类型),这对我的情况并不是很方便。任何想法如何以优雅和短的方式检索每个对象的好部分? – 2012-02-29 14:25:46