2011-11-10 4 views
0

私のモデルのレポートでは、totalという名前の属性があります。レポートビューでは、このグラフの最後の4つのエントリが表示されます(以前のレポートの合計属性)。以前のエントリがないときは、グラフがレンダリングされませんでした。私が戻って計算に「to_f」を追加すると、チャートはレンダリングされ、エントリがないところに「0」だけが表示されます。私はうまくいきましたが、それはただの野生の推測でした。なぜこれは機能しましたか?Rails 3 - "to_f"は問題を解決しますが、なぜ私はよく分かりません

答えて

3

あなたの値はおそらくゼロでした。私はあなたのフォーマッターがnilsとの仕事に熱心ではなかったと推測しています。しかし、nilは0.0を返す.to_fを実装しています。これは、フォーマッタがクラッシュすることなく処理できます。

すなわち

nil.to_f # => 0.0 
+0

クール、それはまさに何が起こったかです。前のエントリはゼロでした。もう一つの質問ですが、他に "to_f"や "to_i"のような方法がありますか? – FattRyan

+0

.to_s文字列、.to_a配列、.to_set(該当する場合)。それはあなたが扱っているオブジェクトに基づいて変化します。 – zoomix

+0

あなたはOBJECT.methods.select {|メソッド|メソッド[0,2] == 'to'}を見つけてください。 nil.methods.select {のように|メソッド[0,2] == 'to'}、または 'a'.methods.select {| method | method [0,2] == 'to'}、または[:a] .methods.select {| method |メソッド[0,2] == 'to'} – zoomix

1

あなたのコードを見ずに私にできることすべては推測です。

あなたのデータベースのいくつかのレポートではreport.totalがnilだったと思います。グラフを作成するために使用しているコードは、nil値を処理できません。

たとえば、nil/2は例外をスローしますが、nil.to_f/2は例外をスローします。

関連する問題