2012-12-30 37 views
2

提交表單後,我的調試功能中顯示正確的自定義參數,但輸入控制檯時顯示默認參數。update_attributes未保存到數據庫

控制器

def update 
    current_user.update_attributes(params[:user]) 
    flash[:success] = "Your settings have been saved!" 
    render new_status_update_path 
end           

型號

attr_accessible :deficit_pct, 
       :target_bf_pct, 
       :activity_factor 

注:

  • 最接近的問題,我可以˚F對此SO的ind是一個問題,它改變了通過關聯存在的對象的屬性。

  • 我使用Object.update方法試過,雖然我得到一個錯誤,指出:

    私有方法'更新」呼籲#

任何想法?

謝謝!

+0

你是怎麼想到後?你得到了什麼? – apneadiving

+0

當我進入控制檯並查詢它們時,我希望在數據庫中具有用戶更改的屬性。 相反,當我直接從控制檯查詢數據庫時,該用戶的屬性沒有改變。 –

+0

你的參數是什麼? – apneadiving

回答

3

在控制檯中玩弄後,我發現即使手動更改屬性,在退出控制檯後屬性也不會「粘住」。

因此,我將進入控制檯,更改用戶屬性,測試它們,並且它們將被更改。如果我存在並重新輸入,那麼測試它們,它們將恢復到它們的默認值。

這使我相信用戶模型中設置其默認值的'after_initialize'方法在每次保存後都會運行。儘管如此,它只會在對象第一次被保存後才運行,但現在我知道它每次保存都會運行。

after_initialize :default_values 

def default_values 
    self.goal = "Cut" 
    self.measurement = "US" 
    self.bmr_formula = "katch" 
    self.fat_factor = 0.655 
    self.protein_factor = 1.25 
    self.deficit_pct = 0.10 
    self.target_bf_pct = 0.10 
    self.activity_factor = 1.3 
end 

一旦我刪除所有這些值和after_initialize方法,能永久地保存。

1

你應該確保你沒有任何驗證錯誤。您可以通過檢查他們:

active_record_model.errors 

在你的情況,這將是

current_user.errors 

此外,你應該從update_attributes打印返回值,看它是否truefalse。如果您獲得false,則保存被取消。這很可能是由驗證錯誤或返回false的回調引起的。

+0

感謝您的回答! –

+0

錯誤消息打印#

1

是這樣的:當保存失敗


def update 
    if current_user.update_attributes(params[:user]) 
     flash[:success] = "Your settings have been saved!" 
     render new_status_update_path 
    else 
     some_error_handling_code 
    end 
end 

會不顯示成功。通常,在向最終用戶報告成功之前,您應該檢查保存或其他後端操作是否失敗。

+0

感謝您的回答。我現在實際上使用這個代碼。 –

+0

即使未保存屬性,它仍在閃爍成功消息。我的猜測是,這與用戶模型的「after_initialize」方法有關,該方法爲模型設置了一些默認值。 –

+0

這是有道理的。很高興我能夠提供幫助。既然你現在使用這個代碼,你能接受我的答案嗎? – tehgeekmeister

4

試試代碼: -

def update 
    if current_user.update_attributes(params[:user]) 
     flash[:success] = "Your settings have been saved!" 
     render new_status_update_path 
    else 
     p 111111111111 
     p current_user.errors.inspect 
    end 
end 

檢查你的日誌中的任何errors.exist該活動記錄