accepted_nested_attributes_for具有多态关联

时间:2012-06-15 12:37:02

标签: ruby-on-rails ruby nested-attributes polymorphic-associations

有没有办法在父母之前停止拯救孩子。

我正在使用具有多态关联的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

因此,由于人物对象验证而保存人员,因此无法保存。但是,孩子(phone_number)正在保存。所以我需要限制它在父(人)保存之前不保存child(phone_number)。

我确实使用validates_presence_ofvalidates_associated尝试了多个选项,但没有一个适合我。

1 个答案:

答案 0 :(得分:0)

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

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

参考:ActiveRecord Transactions