0

on: createRails モデルに検証があります。その検証では、TransactionRecordモデルのインスタンスを作成します。

ただし、TransactionRecord親モデル (検証が実行されるモデル) が作成されたときにのみ永続化されるため、奇妙に思えます。

検証内で、TransactionRecord オブジェクトは肯定的に応答し.persisted?ます。ただし、検証に失敗すると、TransactionRecordオブジェクトは消えます。

「親」が保存されない場合、または検証が失敗した場合、検証で発生するすべてのdbトランザクションがロールバックされるのは、ActiveRecordの機能だと思います。

TransactionRecord検証の結果に関係なく、モデルが確実に作成されるようにするにはどうすればよいですか?

ps

ほとんどのタイプのオブジェクトを作成するのにバリデーションが理想的な場所ではないことは承知しています。

編集

問題は解決しましたが、この問題の解決策がある場合は引き続き関心があります。

4

2 に答える 2

0

検証は、他の ActiveRecord オブジェクトを作成するのに適した場所ではありません。

TransactionRecord作成をbefore_createコールバックに移動してみてください。

オブジェクトが検証に合格せず、永続化されていない場合でも、これらのレコードが作成される可能性があることに注意してください。

于 2012-11-26T11:25:16.663 に答える
0
class TransactionRecord 

validate :persisted, :before => :create

private
  def persisted
    if self.field_name.value?
      errors.add(:field_name, 'is created.')
    end
  end
end
于 2012-11-26T11:31:57.603 に答える