以下循环遍历销售列,并列出所有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
。
我完全迷失了。任何想法?
答案 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'那么你很可能做错了。
在该视图对象中,您可以使用一个哈希,其中包含您要显示的所有价格,并在您的视图中迭代它。