我一直在阅读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
在我称之为帮助者的行上。
答案 0 :(得分: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
P.S。如果你还有错误 - 请与我们分享一个完整的回溯,只知道“未定义的方法”并不能说明多少
答案 1 :(得分:1)
为什么不在视图中检查@statistics
,如下所示:
= show_stats(@statistics) if @statistics
答案 2 :(得分:0)
你试过这个吗?
= show_stats(@statistics) unless @statistics.nil?