在查看之前检查nil结果集

时间:2013-08-04 16:52:24

标签: ruby-on-rails ruby-on-rails-3.2

我一直在阅读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)

目前没有统计数据时,我收到错误消息。如果没有统计信息,我希望View不呈现图形。帮帮忙我做错了什么?

错误:

undefined method `-' for nil:NilClass

在我称之为帮助者的行上。

3 个答案:

答案 0 :(得分:1)

如果我理解正确statistics.pluck(:count)将始终返回一个数组,该数组包含找到的每条记录的count属性值。

ruby empty数组中的

评估为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

P.S。如果你还有错误 - 请与我们分享一个完整的回溯,只知道“未定义的方法”并不能说明多少

答案 1 :(得分:1)

为什么不在视图中检查@statistics,如下所示:

= show_stats(@statistics) if @statistics

答案 2 :(得分:0)

你试过这个吗?

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