使用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>
答案 0 :(得分:3)
当使用复数集合调用partial时,partial的各个实例可以通过以partial命名的变量来访问正在呈现的集合的成员。在这种情况下, 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>
答案 1 :(得分:1)
所以有两种方法: -
1)只需访问available_graph
# _graph_preview_item.html.erb
<div class="thumbnailContainer">
<a class="thumbnail" href="#">
<%= image_tag available_graph %>
</a>
</div>
2)您可以使用as
选项通过其他名称
<%= render :partial => 'graphPreviewItem', :collection => @available_graphs, :as => :graph %>
然后按名称graph
# _graph_preview_item.html.erb
<div class="thumbnailContainer">
<a class="thumbnail" href="#">
<%= image_tag graph %>
</a>
</div>
答案 2 :(得分:1)
根据规范Rails指南的section 3.4.4:
要在partial中使用自定义局部变量名,请在调用partial时指定:as选项。通过此更改,您可以访问集合的实例作为partial中的[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>
答案 3 :(得分:0)
<%= render :partial => 'graphPreviewItem', :collection => @available_graphs, :as => image_val %>
<div class="thumbnailContainer">
<a class="thumbnail" href="#">
<%= image_tag image_val %>
</a>
</div>