2017-12-13 4 views
1

私たちは param argでうまく動作するdependent: destroyaccepts_nested_attributes_forを持っています。破壊時に子モデルの検証に失敗するのはなぜaccepts_nested_attributes_forですか?

子に検証を追加しました。これは期待どおりに動作します。

しかし、2つを組み合わせると、親のsaveは、falseを返すのではなく、未処理のエラーをスローします。エラーが空または存在すると、両方の場合において

class Foo < ActiveRecord::Base 
    accepts_nested_attributes_for :bars, allow_destroy: true 
    ... 
end 

class Bar < ActiveRecord::Base 
    before_destroy :can_do? 

    def can_do? 
    unless yeah_sure 
     errors.add(:base, I18n.t("the.translation")) 
     false 
    end 
    end 
    ... 
end 

bar_spec試験yeah_sure、(正しいメッセージがそこにあります)。

レール部分を踏んだとき、active_supportとトランザクションで3つのレベルのキャッチ、ロールバック/クリーンアップ、リリースがあります。

また、コントローラでは、メソッドレベルと開始ブロックの両方をレスキューしようとしましたが、どちらもエラーをトラップしていません。これは奇妙です。

なぜfoo.saveがfalseを返す代わりにエラーを投げているのですか?

のRails 4.2.10

+0

あなたの 'Bar'エンティティは' Foo'の子であり、親ではありません。理解を容易にするためにログトレースを追加してください。 – yeuem1vannam

答えて

0

あなたは、ネストされた属性に検証を実行するためにinverse_ofを使用することができます。

また、属性を拒否することもできます。reject_if block linkを参照してください。

+0

'inverse_of'を試しましたが、解決されませんでした。ハッシュを無視したくないので、 'reject_if'が役に立たないように、子レコードを削除します。 – blu

関連する問題