1

我一直在阅读Ruby on Rails 中的 Checking for nil in view但我正在努力实现标记的解决方案。

如果结果集不是,我只想在我的视图中加载图表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

在我打电话给助手的线上。

4

3 回答 3

1

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

在 ruby​​ 空数组的计算结果为 时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

PS 如果您仍然有错误 - 请与我们分享完整的回溯,仅知道“未定义的方法”并不能说明太多

于 2013-08-04T17:00:40.743 回答
1

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

= show_stats(@statistics) if @statistics
于 2013-08-04T17:07:15.063 回答
0

你试过这个吗?

= show_stats(@statistics) unless @statistics.nil?
于 2013-08-04T17:20:41.907 回答