2015-10-30 179 views
0

我們收到了@current_employer這個對象,這有點奇怪。第一次更新失敗,第二次成功。第一次更新失敗,第二次成功

(byebug) @current_employer.update(settings_params) 
false 
(byebug) @current_employer.update(settings_params) 
true 

這裏我們初始化它:

@current_employer = Employer.find(decoded_auth_token[:employer_id]) 

這只是一個標準的 「發現」。

當前的解決辦法:

if @current_employer.update(settings_params) || @current_employer.update(settings_params) 

... 

沒有人見過這個?

更新

跟蹤它到這條線在 「before_save」 叫

# self.is_test = false if is_test.nil? 

好像is_test是保留關鍵字?

+0

什麼是你從錯誤的更新所看到的錯誤? –

+0

沒有錯誤信息! - 現在解決。感謝您的幫助 –

+0

沒問題,很高興看到更新 –

回答

0

解決

完整的回調,與修訂評論在線:

def set_default_values 
    self.has_accepted_terms = false if has_accepted_terms.nil? 
    self.live = true if live.nil? 
    self.account_name.downcase! 
    self.display_name ||= account_name 
    self.display_name ||= "" 
    self.contact_first_name ||= "" 
    self.contact_last_name ||= "" 
    self.phone_number ||= "" 
    self.is_test_account = false if is_test_account.nil? 
    true # FIX. The proceeding line was returning 'false', which was giving us a 'false' return value for the before_save callback, preventing the save. 
end 
0

型號

如果它的失敗在一個實例,之後幾乎是緊隨其後的,典型問題是你將不正確/衝突的屬性傳遞給模型。

我會推測您要發送的settings_params有一個值可以防止發生保存。你提到這跟您的更新:

# self.is_test = false if is_test.nil? 

解決這個問題是從你的PARAMS哈希切出任何潛在的錯誤屬性的方式:

def settings_params 
    params.require(:employer).permit(:totally, :safe, :attributes) 
end 

你的模型應該更新一致 - 不管有什麼條件。如果失敗,則意味着模型保存流程中會出現另一個問題。

-

沒有看到額外的信息,我無法看到他們可能是什麼


更新

一種更好的方式來設置默認值如下:

How can I set default values in ActiveRecord?

您不妨使用attribute-defaults gem

class Foo < ActiveRecord::Base 
    attr_default :age, 18 
    attr_default :last_seen do 
    Time.now 
    end 
end 
相關問題