0

有什么办法可以在父母之前停止保存孩子。

我正在使用accepts_nested_attributes_for多态关联。

我使用了多个选项validates_presence_of :parent_idvalidates_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) 正在保存。所以我需要限制它在父母(人)保存之前不保存孩子(电话号码)。

我确实使用validates_presence_ofand尝试了多个选项validates_associated,但没有一个对我有用。

4

1 回答 1

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

如果此人未通过验证,将您的保存包装在事务中应该回滚电话号码保存。

参考:ActiveRecord 事务

于 2012-06-15T16:49:44.083 回答