问题描述
|
你好
我想创建一个变量,如果语句为真,则添加+1,然后在遍历所有语句后显示该变量的总数。
<% @variable_with_counts = 0 %>
<% games.each do |game|%>
<% if game_is_true?(game.id) %>
<% @variable_with_counts += 1 %>
<% end %>
<% end %>
<%= @variable_with_counts %>
这使我没有总数,但只有0或1。
如您所见,我是新手...
更新
很奇怪,既然我再次测试过,就可以了,抱歉!
提前致谢!解决方法
对问题采取更类似于oop和功能的方法,从而减少视图中的逻辑。这个怎么样?
<%= games.all.count {|game| game_is_true? game.id } %>
为了使它更短,请使“ game_is_true?”成为您的游戏类的方法:
class Game << ActiveRecord::Base
def is_true?
game_is_true? self.id # or whatever evaluates this
end
end
结果如下:
<%= games.all.count {|game| game.is_true? } %>
根据您的ActiveRecord版本,您可能需要将\“ all \”替换为\“ each \”或\“ to_a \”。如果\“ game_is_true?\”实际上是在评估SQL字段,则将其转换为带有where子句的作用域方法更有意义,因此您可以执行\“ games.is_true.count \”来减少SQL开销。