我有一个分层的部分方案,我正在尝试编写DRY代码。
我需要将一个变量传递给partial并保持其数组状态,以便在partial中我可以使用:collection
参数渲染另一个partial。
在此页面上我呈现'feed'
部分:
%div.row
%div.span6
%h1 Posts
/Post feed
=render 'feed',:locals => {:feed_items => @posts}
%div.span6
%h1 Groups
/Group feed
=render 'feed', :locals => {:feed_items => @groups}
以下是'feed'
部分:
%ol
-if feed_items.first.is_a?(Post)
=render :partial => 'post_feed_item', :collection => feed_items
-else
=render :partial => 'group_feed_item', :collection => feed_items
=will_paginate feed_items
目前给我这个错误:
undefined local variable or method `feed_items' for #<#<Class:0x007fa8e2aa8b00>:0x007fa8e5405390>
更新1:
真正的错误。 final partial不识别传递给它的:collection
的组件:
undefined local variable or method `feed_item' for #<#<Class:0x007fa8e2aa8b00>:0x007fa8e2c6d670>
最终部分'post_feed_item'
(第3层?):
%li.feed_item.row-fluid
%div.image.span3
=link_to image_tag(feed_item.assets.empty? ? '/assets/small.png': feed_item.assets.first.image.url(:small), :alt => feed_item.title), post_url(feed_item)
所以第一部分有一些问题... feed_items
没有被解析为数组?
答案 0 :(得分:1)
调用
= render partial: 'post_feed_item', collection: feed_items
会为您提供post_feed_item
本地变量,而不是feed_item
变量。要么使用它,要么传入as
选项来设置本地变量名称。
= render partial: 'post_feed_item', collection: feed_items, as: :feed_item
答案 1 :(得分:0)
我认为您需要将其渲染为部分:
%div.row
%div.span6
%h1 Posts
/Post feed
=render :partial => 'feed',:locals => {:feed_items => @posts}
%div.span6
%h1 Groups
/Group feed
=render :partial => 'feed', :locals => {:feed_items => @groups}