0

Есть ли способ остановить сохранение дочернего элемента до родителя.accepts_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 

Так, спасая человека из-за проверки в лицо объекта, оно не было спасения. Однако child (phone_number) сохранял. Поэтому мне нужно ограничить его, чтобы не сохранять child (phone_number) до сохранения родителя (человека).

Я попробовал несколько вариантов, используя validates_presence_of и validates_associated, но никто не работает для меня.

ответ

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

Обертка ваших сейвов в рамках транзакции должна отменять номер телефона, если человек не прошел проверку.

Ссылка: ActiveRecord Transactions

+0

Привет Спасибо за input..I уже встраивать код в транзакции, но как-то не прокатит back..is там так, как мы можем решить эту проблему. –