如何循环并将值保存到数组中

时间:2015-12-08 15:27:24

标签: ruby-on-rails ruby

以下循环遍历销售列,并列出所有4个现有产品值,例如19.99 19.99 3.99 3.99到相应的用户ID。

    <% @sales.each_with_index do |sale, index| %>
     <% if current_user.id == sale.user_id %>
      <% price = Warehouse.where(:product => sale.product).pluck(:mrr) %>
      <%= value = price.split(',').join('.').to_f %>
    <% else %>
    <% end %>
  

现在我想将结果/值保存到一个新的全局变量中,并将每个变量与#34;值&#34;相加。因此19.99 19.99 3.99 3.99的结果应为47.96

我完全迷失了。任何想法?

4 个答案:

答案 0 :(得分:3)

你可以这样做:

<% total = 0 %>
<% @sales.each_with_index do |sale, index| %>
  <% if current_user.id == sale.user_id %>
    <% price = Warehouse.where(:product => sale.product).pluck(:mrr) %>
    <%= value = price.split(',').join('.').to_f %>
    <% total += value %>
  <% end %>
<% end %>
<%= "Total is #{total}" %>

尽管在视图中有这样的代码是非常值得怀疑的。您可以在控制器中获得价格并计算总数。

另请注意,您错过了end。我将不需要的else更改为end

答案 1 :(得分:0)

在您的控制器中,您可以创建即时variable prefixed by @,以便在整个视图中使用

例如在你的控制器中

@total_value = 0

在你看来

<%@sales.each_with_index do |sale, index| %>
     <% if current_user.id == sale.user_id %>
      <% price = Warehouse.where(:product => sale.product).pluck(:mrr) %>
      <%= value = price.split(',').join('.').to_f %>
      <% @total_value += value %>
    <% else %>
<% end %>

答案 2 :(得分:0)

你不应该在视图中做这种事情,甚至最糟糕的是创建全局变量。但无论如何:

<% @values = 0 %>
<% @sales.each_with_index do |sale, index| %>
 <% if current_user.id == sale.user_id %>
  <% price = Warehouse.where(:product => sale.product).pluck(:mrr) %>
  <%= value = price.split(',').join('.').to_f %>
  <% @values += value %>
<% else %>
<% end %>

答案 3 :(得分:0)

您不应该在视图中添加这种逻辑。创建一个视图对象类(控制器实例化)也处理所有这些。你也可以做类似的事情:

user.sales.each do |sale|
  total += find_price(sale)
  # do more stuff
end

如果你问'if current_user.id == sale.user_id'那么你很可能做错了。

在该视图对象中,您可以使用一个哈希,其中包含您要显示的所有价格,并在您的视图中迭代它。