我有一個有幾個accept_nested_attributes_for的模型。有一個要求,當保存和繼續時,我至少有一個嵌套屬性。在保存後驗證Rails模型?
然而,驗證發生前的保存,所以當我刪除的項目和活動,它讓我們到底。
我如何可以驗證,當我保存,我讓每個嵌套類型有至少一個項目?
我有一個有幾個accept_nested_attributes_for的模型。有一個要求,當保存和繼續時,我至少有一個嵌套屬性。在保存後驗證Rails模型?
然而,驗證發生前的保存,所以當我刪除的項目和活動,它讓我們到底。
我如何可以驗證,當我保存,我讓每個嵌套類型有至少一個項目?
有與accepts_nested_attributes_for的錯誤。這意味着在父模型中進行驗證時,您必須更加狡猾。
你可以使用一個:after_save的回調函數在每個嵌套模式,以檢查它是否是最後一個。但是如果有很多嵌套關聯需要確保至少有一個,那麼這不是非常乾燥。
然而,這是鏈接錯誤一個有效的解決方法:
class Whatever < ActiveRecord::Base
:has_many => :association_a
:has_many => :association_b
def ensure_minimum_associations
bad_associations = [:association_a, :association_b].
select{|assoc| self.send(assoc).all?{|a| a.marked_for_destruction?}}
unless bad_associations.empty?
bad_associations.each do |association|
errors.add_to_base "Each #{self.class.name.downcase} must retain at least one #{association}"
end
return false
end
end
end
您可以隨時撥打一個模型valid?
,它會運行驗證。
我意識到這一點,但我需要它在保存之前發生 - 在嵌套屬性之前保存父對象get – 2009-10-12 16:35:39
如果任何驗證返回false,則整個事務將回滾。無論它是在父級還是嵌套模型中。 – EmFi 2009-10-12 18:21:57
我相信你正在尋找validates_associated
你會做什麼,如果驗證失敗? – 2009-10-12 15:24:14
errors.add_to_base – 2009-10-12 15:26:18
@neil:不,我的意思是現在保存了無效模型,所以您需要調整模型。 – 2009-10-12 16:31:48