2015-11-18 61 views
0

默認情況下設計在RegistrationsController#create中運行resource.save而不是resource.save!。這使得不會引起我的資源驗證錯誤。我確定他們已經考慮過這個問題。我從資源模型中拿出:validatable但它沒有幫助。如何修改Rails中設計寶石的默認行爲

我的問題是:不設計給這個選項嗎?

+0

你想要做什麼?請詳細說明。 –

回答

1

resource.save!會造成討厭的500錯誤,如果您的用戶模型處於無效狀態,而resource.save將添加驗證錯誤的user.errors哈希,並返回false,所以可以顯示和糾正驗證錯誤。

我不確定爲什麼你可以更喜歡save!

+0

你總是可以找到致電救援的例外。兩種方法你都必須檢查是否有錯誤。不過,我不確定何時使用'save!'。你會在哪種情況下使用它? – borjagvo

+0

@rlarcombre,同樣,current_user是'nil',因爲用戶沒有保存,所以你會得到'user.errors'? – borjagvo

+0

如果你調用一個新的模型實例(在這種情況下爲用戶),如果存在驗證錯誤,那麼是的,它不會被保存到數據庫,但是你仍然會在模型實例中存儲模型實例應用錯誤。 因此,在設計RegistrationsController創建動作的情況下,最終用戶將看到註冊表單(新動作),並顯示模型錯誤,以便它們可以根據需要進行更正。無需使用爆炸方法。 – rlarcombe