如何计算渲染部分中的循环?

时间:2016-03-08 21:46:12

标签: jquery ruby-on-rails loops ruby-on-rails-4 counter

我有一个List模型和一个ListItem模型。

在list / show中我有一些代码,然后我调用

=render @list.list_items

在我的list_items / list_item partial中,如果条件存在,我会运行一个循环:

-if condition.exists?
   output
-else
   output something else

我想要做的是在if condition.exists?内放一个计数器,以便我知道条件存在多少次。然后,回到列表/显示视图中,我希望能够告诉用户页面顶部的condition.exists?.count与总@list.list_items.count

我不确定如何在渲染部分的if循环内设置计数器。我知道render @list.list_items应该创建一个list_item_counter', but I only want a counter for the times the condition within the rendered partial exists. Is there a way to trick the list_item_counter`来实现这样的功能吗?

我也不确定如何在列表/显示视图中访问此条件计数器,因为我需要完成render @list.list_items,然后以某种方式将计数器值传递回@list。

我真的很感激任何建议,因为我很难过。

2 个答案:

答案 0 :(得分:1)

使用内置的Rails部分迭代器无法做任何你想做的事情,Rails提供了一个计数器,它的部分称为list_item_counter,但每次迭代它总是递增一次,你不能有条件地增加它。

要做你想做的事,你需要创建自己的迭代器,可能是这样的:

- counter = 0
- @list.list_items.each do |item|
  - if condition.exists?
    - partial = "item"
    - counter += 1
  - else
    - partial = "other_partial"
  = render partial: partial, object: item, locals: { counter: counter }

答案 1 :(得分:-2)

cnt = 0
-if condition.exists?
   output
   cnt += 1
-else
   output something else

然后cnt将是您的计数器