0

我有一个分层的部分方案,正在尝试编写 DRY 代码。我需要将一个变量传递给一个局部变量并保持它的数组状态,以便在局部变量中我可以使用:collection参数渲染另一个局部变量。

在此页面上,我呈现'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没有被解析为数组?

4

2 回答 2

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
于 2013-02-19T02:23:19.913 回答
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}
于 2013-02-19T01:49:23.190 回答