有没有办法在视图中写一个干净的if nil。假设我缺少红宝石在这里咬我。例如,
如果对象为零,则返回,找不到任何内容
有
<%= @objects.count if @objects %>
想要这样的东西
<%= @objects.count if @objects then "nothing found" %>
答案 0 :(得分:2)
有很多方法可以写这样的东西。
简单的事情就是:
<% if @objects %>
<%= @objects.count %>
<% else %>
nothing found
<% end %>
如果你进入一个稍微复杂的条件,我会建议将逻辑移动到帮助器并从视图中调用它。例如:
<%= count_for(@object) %>
答案 1 :(得分:0)
这是一个很好的解决方案:
<%= "nothing found" unless @objects.try(:length).to_i > 0 %>
其中一个问题是您无法在nil对象上运行count
。因此,您需要使用Rails的超级方便.try()
方法在@objects = nil
而不是NoMethodError
时返回nil。
下一期:您无法使用nil
在>
和数字之间进行比较,因此您需要将@objects.length
的结果转换为一个整数,该整数将为0返回0 。
最后,请尝试拨打length
而不是count
。这将避免在定义@objects
时运行任何额外查询。
避免:SELECT COUNT(*) FROM 'objects'
此外,如果您想使用这种单行技术显示计数,您可以简单地写一个简写if / else语句,如下所示:
<%= @objects.try(:length).to_i > 0 ? @objects.length : "nothing found" %>
最后一个选项:
使用pluralize方法,它可以处理nil计数:
Showing <%= pluralize( @objects.try(:length), 'object' ) %>
抱歉,我知道这已经很晚了,但希望对其他人有帮助!