0

親の前に子の保存を停止する方法はありますか。

多態的な関連付けで使用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) は保存していました。したがって、親(人)が保存する前に子(電話番号)を保存しないように制限する必要があります。

validates_presence_ofと を使用して複数のオプションを試し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 に答える