2012-04-28 77 views
0

我遵循rails教程並有一個工作用戶系統,但有一件事讓我很煩惱:保存用戶時,即使在控制檯中,也必須關閉驗證因爲如果沒有保存密碼和密碼確認,它將不會保存,並設置爲相同的內容。Rails教程 - 必須保存關閉用戶的驗證

這是一種痛苦,如果我向用戶添加其他重要的驗證,這似乎是潛在的危險。那麼是否有處理這個問題的好方法?真的,我希望驗證只適用於更新來自用戶,而不是來自我自己的代碼。

因此,用戶模型具有這樣的:

validates :password, length: { minimum: 6 } 
    has_secure_password # this does the hashing, comparisions, etc for us. 
    validates :password_confirmation, presence: true 

創建用戶時,這個偉大的工程,而當用戶編輯他/她的個人資料,因爲它要求的密碼再次進入。但是,對於其他編輯,這很煩人。例如:

user = User.find_by_name("bob") 
user.reputation = 200 
user.save(validate: false) # I really don't want to have to care about password validations here. 
+0

也許會讓您的場景變得更加豐富多彩。您是否在創建用戶之前創建了密碼?或者每次保存新數據時系統都會檢查密碼?或者我還沒有提到的其他一些情況? – 2012-04-28 11:33:29

+0

我編輯過這個來解釋它更好。 – Jords 2012-04-28 11:50:46

回答

3

您可以撥打

@user.save(:validate => false) 
+0

謝謝,但這就是我的問題 - 這是一個真正的痛苦,似乎每次我想保存用戶時都會有這種危險。 – Jords 2012-04-28 11:17:59

+1

默認情況下不檢查驗證是危險的,因爲您可能會意外地破壞您的數據......並且如果您真的知道自己在做什麼,您可以繞過驗證 – 2012-04-28 11:22:52

+0

我同意@Adrian。將密碼和確認都設置爲相同的東西並不困難。 – EricM 2012-04-28 11:32:57

0

你可以嘗試只驗證上創建。這將使得密碼(或其他變量)僅在註冊時需要,但在編輯現有用戶時不需要。

0

你爲什麼不只是爲它創建不同的型號,用於記錄密碼更改的安全模型&,以及任何其他配置文件模型,並提供聲譽,獎牌和內容。

在第一個模型創建新的功能,可以讓你完全忘記了第二個,像

def reputation value 
    self.profile.reputation = value 
    self.profile.save 
end 
0

有點遲到了,但如果你要更新一個屬性,你可以使用update_attribute方法這會跳過驗證檢查。在這種情況下,您可以撥打

user.update_attribute :reputation, 200