问题 Rails:渲染集合部分:获取部分内部集合的大小


我有一个我想用部分渲染的项目集合:

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

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

我想用这些元素编号 递增数字。所以输出应该是:

3: a
2: b
1: c

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

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

这给了我

1: a
2: b
3: c

但对于 上升 数字,我需要项目的总数,我可以提供一个本地的部分:

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

然后在部分:

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

但是我感觉像重复一样,因为渲染方法已经知道了集合的大小。

除了使用局部变量之外,真的没有办法让集合中的项目总数达到局部吗?


5799
2017-11-15 12:49


起源

没有。 你自己看 - Vadim Chumel
我看了看,但我以为我错过了什么。 - Sven Koschnicke


答案:


以下是可能的 自Rails版本4.2起

在部分内部,您可以访问一个名为的函数/变量 collection_iteration。调用 collection_iteration.size 会给你总数。

来自 更新日志

迭代对象可用作局部变量    #{template_name}_iteration 使用集合渲染部分时。

它提供了访问 size 正在迭代的集合中   当前 index 和两种便利方法 first? 和 last?


13
2017-11-15 20:50



不,没有 collection 部分可用。至少在Rails 3.2.6中没有。你从哪里得到这些信息? - Sven Koschnicke
我从源头得到了这个: github.com/rails/rails/blob/... - lucasuyezu
在发布答案之前,我还在我的工作申请中进行了测试。我可能会在星期二检查它的Rails版本,但它确实有效。 - lucasuyezu
如果这样可行会很棒,但我还是不知道如何。 - Sven Koschnicke
似乎拉取请求仍然没有合并,但计划用于Rails 4.2.0: github.com/rails/rails/pull/7698 - Sven Koschnicke