2017-04-11 35 views
0

我注意到這個問題彈出很多,但在嘗試了幾個建議的解決方案後,我發現我仍然無法弄清楚什麼是錯的。我有一個稱爲樣本和用戶模型的模型。樣本獲得批准時,樣本的小時數應該添加到用戶總小時數中,但用戶值永遠不會更新。每個用戶都有一封唯一的電子郵件,在提交審批時存儲在樣本中。我檢查了數據庫,以確保它不是訪問該值的問題,並且沒有錯誤被拋出,所以我不確定發生了什麼。我很新的紅寶石和鐵軌,所以任何幫助表示讚賞。我samples_controller.rb包含功能:Rails .update_attribute不更新

def approve 
    @sample = Sample.find(params[:id]) 
    @sample.update(sample_status:1) 
    @user = User.find(Sample.email) 
    hours_update = @user.hours + @sample.volunteer_hours 
    @user.update_attributes(:hours, hours_update) 
    redirect_to samples_adminsamples_path 
    end 

編輯:感謝大家的幫助,結果發現我需要使用命令

@user = User.find_by(email: @sample.email) 

,以獲得正確的用戶。

+0

你能告訴我你在幾小時更新中獲得什麼價值,什麼是小時數據類型字段? – Vishal

回答

0

你可以給一些更多的數據,如樣本和用戶表的數據庫結構。

從有限的信息,我認爲行號4(@user = User.find(Sample.email))是問題。

.find()試圖查詢數據庫上idSample.email將會給用戶的電子郵件,而不是在數據庫中對應用戶的id

我也猜測,在你的控制器,你一定抑制拋出的異常,其中使用begin-rescue塊,因爲.find()拋出ActiveRecord::RecordNotFound異常,如果它未能找到該資源。

或者,如果它正在提取用戶,您也可以嘗試update_column來更新值。

+0

這是問題所在,我需要使用@user = User.find_by(email:@ sample.email)'來獲得合適的用戶,謝謝你的幫助! – newtothis

0

您正在使用不正確的格式爲update_attributes

應該

@user.update_attributes(hours: hours_update) 

@user.update_attribute(:hours, hours_update) 

注:update_attribute不會觸發回調

+0

我嘗試了您推薦的兩種格式,並且仍然存在相同的問題,沒有錯誤消息或任何其他線索。 – newtothis

+0

根據https://apidock.com/rails/ActiveRecord/Persistence/update_attribute,使用update_attribute時,「驗證被跳過,回調被調用」。 –