2013-02-19 46 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

相關問題