我在Rails應用程序的Microphoto模型中有兩個額外的整數字段,:votes_up
和:votes_down
。我沒有在數據庫中手動設置任何初始值。update_attribute'undefined method'+'for nil:NilClass'
這是在我的控制器:
def vote_up
@microphoto = Microphoto.find(params[:id])
@microphoto.update_attribute(:votes_up, @microphoto.votes_up + 1)
redirect_to root_path
end
def vote_down
@microphoto = Microphoto.find(params[:id])
@microphoto.update_attribute(:votes_down, @microphoto.votes_down + 1)
redirect_to root_path
end
,這是我的觀點:
<%= link_to "vote up", vote_up_microphotos_url(feed_item.id), :method => :put %>
<%= link_to "vote down", vote_down_microphotos_url(feed_item.id), :method => :put %>
,但是,當我點擊例如,投了鏈接,它給我的錯誤:
NoMethodError in MicrophotosController#vote_up
undefined method `+' for nil:NilClass
我認爲應該有一個問題,使用update_attribute
。我的一位朋友也提到,問題可能是由於字段中未設置的0
的初始值所致。
修訂
另一個問題,必須有一個錯字,但我不能找到它。 votes_up鏈接正常工作並正確呈現,但票數不是! uninitialized constant MicrophotosController::O
,我相信你的朋友可能是正確的。如果該字段沒有默認值,那麼您將嘗試添加'nil + 1',這會導致您收到的錯誤。你可以在遷移或'new'方法中設置初始值。 –
試試這個:'(@ microphoto.votes_up || 0)+ 1'這意味着如果'@ microphoto.votes_up'爲零(不等於零,沒有默認值),它將使用0代替 – MrYoshiji