2013-08-04 95 views
1

之前,我一直在读Checking for nil in view in Ruby on Rails但我在努力实现显着的解决方案。检查无所获设置的观察

我只想在我看来负载的曲线图,如果结果集不是nil

控制器:

@statistics = # ...my ActiveRecord query... 

助手:

def show_stats(statistics) 
    if statistics.pluck(:count) 
     image_tag(Gchart.line :size => '640x260', 
     :stacked => false, 
     :title => '', 
     :data => [statistics.pluck(:count)], 
     :legend => ['Stats'], 
     :bar_colors => ['3300CC', '3399FF'], 
     :axis_with_labels => ['y']) 
    end 
end 

视图(HAML):

= show_stats(@statistics) 

目前在没有统计数据,我得到一个错误。如果没有统计信息,我希望视图不显示图形。我在帮助者身上做错了什么?

错误:

undefined method `-' for nil:NilClass 

在哪里我称之为辅助线。

回答

1

如果正确地明白statistics.pluck(:count)将总是返回由count属性对于找到的每个记录的值的阵列。

在红宝石空数组计算为true,你可以尝试重写if一行:

if statistics.pluck(:count).any? 

其实这是个好主意来缓存值,而不是从DB下面再几行取它:

if (counts = statistics.pluck(:count)).any? 
    ... 
    :data => [counts] 
    ... 
end 

也是我承担:data选项希望值数组的值数组,而不是数组,以便最终版本将是:

if (counts = statistics.pluck(:count)).any? 
    ... 
    :data => counts 
    ... 
end 

附:如果你仍然有一个错误 - 请与我们分享一个完整的回溯,只知道“未定义的方法”并没有告诉太多

1

为什么不在您的视图检查@statistics像如下:

= show_stats(@statistics) if @statistics 
+0

如果@statistics为零,则错误将是未定义的方法'pluck' – keymone

0

你有没有尝试这个?

= show_stats(@statistics) unless @statistics.nil?