2016-04-23 44 views
0

我使用Ruby on Rails和我通過一個對象迭代。得到錯誤只有當計算一些時間:「未定義的方法‘/’近親:NilClass」

我想從分兩列值然後再乘以100

乘我不知道如果我可以把它寫在視圖或者如果我需要在模型中寫一個方法顯示的百分比或控制器。我首先選擇將它寫入視圖中,並且僅在某些時候出現「Undefined method」/「for nil:NilClass」錯誤。

我認爲這是當存在對其中的一列沒有值拋出真實的錯誤。當我在模型或控制器中編寫方法時,沒有錯誤,但我試圖顯示的值爲空。

這裏是我計算的外觀視圖:

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意味着:

  • 你會表現出這樣的事情特別?如果是的話:

    <% if object.column1.nil? %> 
        nil or whatever else you want to say 
    <% else %> 
        <%= object.column1/object.column2.round(2) * 100, precision: 0) %> 
    <% end %> 
    
  • 你要正確對待nil喜歡零?如果是的話:

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

    你想使用to_f代替to_i如果column1是浮點值。如果n是整數然後n.to_i == nnil.to_i == 0所以to_i是隱藏常見的「治療nil作爲0」邏輯的便利方式;類似地對於floating_point_value.to_fnil.to_f

如果object.column2也可以nil,那麼你必須做出如何處理object.column2.nil?類似的決定。

+1

我認爲做到了!我嘗試了simiar if/else語句和那些沒有價值但由於在正在完成一種形式的值是依賴於任何列拋出一個錯誤。我所要做的只是在'object.column1'後添加'to_i'。非常感謝! – BB123

相關問題