我試圖渲染不同對象的集合,每個對象的格式都相同。我想保持乾燥,所以我想使用偏色和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