2016-04-23 22 views
0

私はRuby on Railsを使用していて、オブジェクトを反復しています。"未定義メソッド '/' for nil:NilClass"

私はその後、私はちょうどビューでそれを書くことができるかどうか、私は、モデル内のメソッドを記述する必要がある場合、私は知らない100

を乗じ2つのカラムの値を割るからのパーセンテージを表示したいですまたはコントローラ。私は最初にそれをビューに書き込むことを選択しましたが、「未定義メソッド」/「for nil:NilClass」というエラーが発生しています。

1つの列に値がない場合にスローされるエラーだと思います。モデルやコントローラにメソッドを書き込むと、エラーは表示されませんが、表示しようとしている値は空白です。

show.html.erb

<%= number_to_percentage(object.column1/object.column2.round(2) * 100, precision: 0) %> 

答えて

2

/ Rubyとa/bの他のどのような方法であるa./(b)を言うだけの異なった方法である:私の計算がビューにどのように見えるか

はここですその結果、object.column1nilであることを示すエラーが表示されます。

あなたはobject.column1.nilを意味したいかを決定する必要があります。

  • あなたは特別なものを表示していますか?あなたはゼロのようなnilを治療しますか

    <% if object.column1.nil? %> 
        nil or whatever else you want to say 
    <% else %> 
        <%= object.column1/object.column2.round(2) * 100, precision: 0) %> 
    <% end %> 
    
  • :そして、もしそうなら?そして、もしそうなら:

    <%= object.column1.to_i/object.column2.round(2) * 100, precision: 0) %> 
    

    あなたはcolumn1は、浮動小数点値である場合には代わりにto_ito_fを使用したいと思います。 nが整数の場合、n.to_i == nだがnil.to_i == 0だからto_iは、一般的な "treat nil0"というロジックに隠す便利な方法です。 floating_point_value.to_fおよびnil.to_fについても同様である。

object.column2nilことができるなら、あなたはobject.column2.nil?をどのように扱うかについての同様の決定をしなければなりません。

+1

私はそれをしたと思います!私はsimiar if/else文を試してみました。値がフォームの完成に依存しているので、まだ値を持っていない列にはエラーがスローされました。私がしなければならなかったのは、 'object.column1'の後ろに' to_i'を追加することでした。どうもありがとうございます! – BB123

関連する問題