0

有沒有什麼辦法可以在父代之前停止保存子代。accepted_nested_attributes_for多態關聯

我正在使用具有多態關聯的accepts_nested_attributes_for

我使用了多個選項validates_presence_of :parent_id,validates_assoicated :parent但沒有任何工作。

例如,我有一個類

Class Person 
    include HasPhoneNumbers 
    .. 
end 


module HasPhoneNumbers 
def self.included(kclass) 
    kclass.has_many :phone_numbers, :as => :callable, :dependent => kclass == Person ? :destroy : :nullify 
end 
klass.accepts_nested_attributes_for :phone_numbers, :reject_if => lambda {|pn| pn.keys.any?{|k| k.to_sym != :id && pn[k].blank?} } 
end 


class PhoneNumber 
    belongs_to :callable, :polymorphic => true 
end 

因此,儘管節省的人由於人對象確認,這是不節能。但是,孩子(電話號碼)正在保存。所以我需要限制它在父(人)保存之前不保存子(phone_number)。

我確實嘗試了多個選項,使用validates_presence_ofvalidates_associated,但沒有一個適合我。

回答

0
@person = Person.new(params[:person]) 
ActiveRecord::Base.transaction do 
    person.save! 
end 

將交易保存在交易中應該回滾電話號碼,除非該人未通過驗證。

參考:ActiveRecord Transactions

+0

嗨感謝input..I已經嵌入事務中的代碼,但不知何故,沒有滾動back..is有什麼辦法可以解決這個問題。 –