1

使用rails,我如何遍历控制器中定义的数组,为每个项目创建一个部分,并访问部分中每个项目的值?

控制器

为我的“grapher”页面定义一个数组:

class StaticPagesController < ApplicationController
  def home
  end

  def grapher
    @available_graphs = ["pie.png", "line.png", "lineplusbar.png"]
  end
end

页面视图

在我grapher.html.erb看来,我想遍历我的数组并为每个项目创建一个部分。

<%= render :partial => 'graphPreviewItem', :collection => @available_graphs %>

局部视图

如何访问部分内部的数组项?

<div class="thumbnailContainer">
    <a class="thumbnail" href="#">
        <%= image_tag "this should be the array item value" %>
    </a>
</div>
4

4 回答 4

3

文档中:

当使用复数集合调用分部时,分部的各个实例可以通过以分部命名的变量访问正在呈现的集合的成员。在这种情况下,partial 是 _product,并且在 _product partial 中,您可以参考 product 来获取正在呈现的实例。

因此,在您的情况下(请注意,在 ruby​​ 命名约定中,我们使用蛇形部分名称):

<%= render :partial => 'graph_preview_item', :collection => @available_graphs %>

# _graph_preview_item.html.erb
<div class="thumbnailContainer">
    <a class="thumbnail" href="#">
        <%= image_tag graph_preview_item %>
    </a>
</div>

或者,更明确地说,您可以使用:as来选择您喜欢的名称。像这样:

<%= render :partial => 'graph_preview_item', :collection => @available_graphs, :as => :graph %>

# _graph_preview_item.html.erb
<div class="thumbnailContainer">
    <a class="thumbnail" href="#">
        <%= image_tag graph %>
    </a>
</div>
于 2013-10-29T08:28:53.830 回答
1

So there are 2 ways :-

1) Just access it as available_graph

# _graph_preview_item.html.erb
<div class="thumbnailContainer">
  <a class="thumbnail" href="#">
    <%= image_tag available_graph %>
  </a>
</div>

2) You can use as option to access it by some other name

<%= render :partial => 'graphPreviewItem', :collection => @available_graphs, :as => :graph %>

Then access it by name graph

# _graph_preview_item.html.erb
<div class="thumbnailContainer">
  <a class="thumbnail" href="#">
    <%= image_tag graph %>
  </a>
</div>
于 2013-10-29T06:14:17.380 回答
1

根据规范 Rails 指南的第 3.4.4 节:

要在部分中使用自定义局部变量名称,请在对部分的调用中指定 :as 选项。通过此更改,您可以将集合的实例作为局部变量中的 [a] 局部变量进行访问。

因此,将您的@available_graphs实例变量作为集合传递给您的部分。部分将为您的集合的每个成员呈现(在您的情况下,是一个字符串数组)。在每个部分中,被迭代的集合成员可以通过item局部变量访问:

# grapher.html.erb
<%= render :partial => 'graph_preview_item', :collection => @available_graphs, :as => :item %>

# _graph_preview_item.html.erb
<div class="thumbnailContainer">
    <a class="thumbnail" href="#">
        <%= image_tag item %>
    </a>
</div>
于 2013-10-29T06:17:53.747 回答
0
<%= render :partial => 'graphPreviewItem', :collection => @available_graphs, :as => image_val %> 

<div class="thumbnailContainer">
    <a class="thumbnail" href="#">
        <%= image_tag image_val %>
    </a>
</div>
于 2013-10-29T06:15:41.310 回答