1

Ruby on Rails のビューで nil のチェックを読んでいますが、マークされたソリューションの実装に苦労しています。

結果セットが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 に答える
0

これを試しましたか?

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