未定义的活动记录数组@ objects.count的计数方法

时间:2011-07-08 22:44:19

标签: ruby-on-rails ruby-on-rails-3 activerecord

有没有办法在视图中写一个干净的if nil。假设我缺少红宝石在这里咬我。例如,

如果对象为零,则返回,找不到任何内容

<%= @objects.count if @objects %>

想要这样的东西

<%= @objects.count if @objects then "nothing found" %>

2 个答案:

答案 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' ) %>

抱歉,我知道这已经很晚了,但希望对其他人有帮助!