2013-02-19 24 views
0

我有一个分层部分方案,并且正在尝试编写DRY代码。 我需要传递一个变量到一个局部区域并保持它的数组状态,这样在局部区域内我可以用: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:

真正的错误。最终部分不承认: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

您需要显示错误的部分位置。看起来您正在对您的post_feed_item或group_feed_item部分之一调用feed_item,这是不正确的。约定是局部变量具有与局部名称相同的名称 – jvnill 2013-02-19 01:57:20

+0

好吧,让我试着更改本地var名称 – Brian 2013-02-19 02:00:03

+0

等待,这意味着我需要制作两个'feed'部分。一个用于组和一个用于帖子 – Brian 2013-02-19 02:01:42

回答

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 
+0

你如何将'feed_item'作为实例变量传递? – Linus 2015-07-15 13:07:08

+0

如果你已经有了'@ feed_item',你可以直接访问它在你的部分或把它作为一个局部变量'当地人:{feed_item:@feed_tiem}' – jvnill 2015-07-15 13:55:36

+0

对不起我的问题没有包括整个问题的规模。我有一个部分,期望一个实例变量和一个数组,我想要传递给这个部分。例如:'collection:@items,as :: item',其中':item'应该是':@ item'。 (最后一部分不起作用。) – Linus 2015-07-15 14:08:17

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} 
+0

让我快点给我一个 – Brian 2013-02-19 01:51:15

+0

是的,对不起,使用您的建议可以让我回到原来的问题,在寻求解决方案时我会因为更多的错误而被混淆。原始问题是第二层部分不接受传递给它的收集项目。查看编辑 – Brian 2013-02-19 01:53:19

+0

您的Feed部分中的local_assigns [:feed_items]的值是什么? – 2013-02-19 01:56:35

相关问题