ruby-on-rails Rails:渲染集合部分:正在获取分部内部集合的大小

dba5bblo  于 2023-05-19  发布在  Ruby
关注(0)|答案(3)|浏览(90)

我有一个要用局部渲染的项目集合:

@items = ['a','b','c']

<%= render :collection => @items, :partial => 'item' %>

我想用 * 升序 * 来给元素编号。因此输出应为:

3: a
2: b
1: c

我知道rails在partial内部提供了一个计数器,所以如果我想对项目进行 * 降序 * 的编号,我可以创建下面的partial:

<%= item_counter %>: <%= item %>

这给了我

1: a
2: b
3: c

但是对于 * 升序 * 数字,我需要项目的总数,我可以提供局部到部分:

<%= render :collection => @items, :partial => 'item', :locals => {:total => @items.size} %>

然后在partial:

<%= total - item_counter %>: <%= item %>

但我觉得这像是重复,因为render方法已经知道集合的大小。

除了使用局部变量之外,真的没有办法在分部中获得集合的项目总数吗?

swvgeqrz

swvgeqrz1#

以下是可能的自Rails版本4.2
在partial中,您可以访问一个名为collection_iteration的函数/变量。调用collection_iteration.size将给予总数。
关于changelog
当使用集合呈现分部时,迭代对象作为局部变量#{template_name}_iteration可用。
它可以访问正在迭代的集合的size,当前的index和两个方便的方法first?last?

kgsdhlau

kgsdhlau2#

啊。想回答这个问题。但找到了正确答案。无论如何,这里有一个关于未来的提示。您可以使用Ruby元编程来研究Rails机制。例如,通过在视图中调用方法'Kernel#local_variables',在我的示例中输出:

[0] = :local_assigns
[1] = :output_buffer
[2] = :row
[3] = :row_counter
[4] = :row_iteration
[5] = :highlighted_description
[6] = :source_description

万一

<%= render partial: 'card', collection: @offers, as: :row %>
xv8emn3q

xv8emn3q3#

对于Rails的最新版本,比如Rails 7,如果你渲染的是一个像这样的部分:

render @items

然后,在部分代码中,您应该可以访问item_iteration,并使用item_iteration.size获取总大小。您还应该可以访问item_counter,这是当前索引。

相关问题