2013-06-05 90 views
1

我有這樣的代碼在我的Rails應用程序爲什麼Rails增量方法不保存更改?

if params[:vote][:type] == "up" 
    answer = Answer.find_by_id(params[:vote][:id]) 
    answer.increment(:ups) 
    render text: answer.ups 
end 
if params[:vote][:type] == "down" 
    answer = Answer.find_by_id(params[:vote][:id]) 
    answer.increment(:downs) 
    render text: answer.downs 
end 


它不給任何錯誤,但增加值未在DB更新來實現大拇指up/down功能。

此代碼在rails控制檯中正常工作。

請幫幫忙,

在此先感謝

回答

1

請你寫你的模型的架構,我指的是數據類型的字段

另一個遷移:

change_column :answers, :ups, :integer, :default: 0 
change_column :answers, :downs, :integer, :default: 0 

可以幫助你

+0

create_table「answers」,:force => true do | t | t.text 「answer_data」 t.integer 「UPS」 t.integer 「起伏」 t.integer 「question_id」 t.integer 「USER_ID」 t.datetime 「created_at」,日期null =>假 噸.datetime「updated_at」,:null => false 結束 –

+0

遞增/遞減字段應該有默認值0,否則它不會工作 – Muntasim

+0

我已經使用了一個方法,保持0作爲向上/向下的值。在保存模型之前調用該方法 –

1

檢查一次

if params[:vote][:type] == "up" 
    answer = Answer.find_by_id(params[:vote][:id]) 
    answer.to_i.increment(:ups) 
    render text: answer.ups 
elsif params[:vote][:type] == "down" 
    answer = Answer.find_by_id(params[:vote][:id]) 
    answer.to_i.increment(:downs) 
    render text: answer.downs 
end 
+0

答案是一個像answer_data,UPS屬性模型,起伏等..所以我不能將其轉換爲整數..我甚至嘗試在answer.increment後調用answer.save,但它仍然不起作用 –

3

這是by design。該方法遞增屬性但不保存。如果還想保存,請使用increment!bang version)。

+0

不需要..仍然顯示0在DB –

+0

的增量!方法返回true仍然數據庫不反映變化 –

+0

如果它沒有記錄,我想你的問題在別的地方。嘗試手動增加這個東西並保存。如果它不起作用,那麼列定義可能有問題。 –