0
保存對象時,我希望執行的字段有更新。 無論對象是否經過驗證,此更新都必須發生, 並且必須在驗證之前進行。Rails 2.3.14:保存未經驗證時,before_validation未運行
問題是before_validation在沒有驗證的情況下保存時不運行。 這段代碼應該放在哪裏? 有沒有一種方法可以在保存而不驗證時調用before_validation回調?
謝謝!
保存對象時,我希望執行的字段有更新。 無論對象是否經過驗證,此更新都必須發生, 並且必須在驗證之前進行。Rails 2.3.14:保存未經驗證時,before_validation未運行
問題是before_validation在沒有驗證的情況下保存時不運行。 這段代碼應該放在哪裏? 有沒有一種方法可以在保存而不驗證時調用before_validation回調?
謝謝!
沒有,根據http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
你,因爲你是頑皮達不到這個問題,要保存未經驗證。不要那麼做。 嚴重。相反,你應該放鬆你的驗證策略,所有這些「無需驗證的保存」廢話,變成「保存與驗證」,而不是。
爲此,您可以將某些選項傳遞給驗證方法,或者在自定義方法中使用一些條件子句。
class User < ActiveRecord::Base
before_validation :my_crazy_thing
validates_presence_of :name, :unless => :is_a_robot?
def is_a_robot?
@brain_type == :positronic
end
def my_crazy_thing
@brain_type = brain_surgery.brain_type
# or whatever
end
def validate
if condition_exists_to_run_custom_validations
errors.add_to_base 'WTF' if @universe.exploded?
end
end
end
所以之前,你不得不跳過驗證,以便機器人可以存在沒有名稱。但是如果你正確地設置了驗證,那麼如果沒有它們,你永遠不需要保存。你可以告訴你已經正確設置了它們,因爲如果不再驗證,就不必保存。現在你可以正常使用before_validation
回撥作爲一個很好的獎勵。
謝謝!你已經啓發了我:)我保存時沒有驗證什麼時候我遇到過許多帶有after_save觸發器的對象將不得不被保存的情況,並且如果所有那些after_save都沒有在所有驗證之前發生,那麼非通過驗證。 。 – Nadav 2012-07-26 11:19:36