0

私はsingular_collection_ids属性を更新できるレールアプリのフォームを持っています(リレーションタイプはhas_many から)。また、更新前に検証する必要があります。

検証の問題にはオブジェクトの以前の値が必要ですが、この値を提供するメソッドsingular_collection_ids_wasはありません。また、 singular_collection_idsメソッドは、一時的な値を持たない結合テーブルで直接動作するため、

self.class.find(id).singular_collection_ids

内部検証は役に立ちませんでした。

検証段階で以前の値を取得する方法はありますか?

4

1 に答える 1

0

それが機能するかどうかはわかりません(そして間違いなく風変わりです)が、これを試すことができます:

 class Player

   has_many :join_models, before_remove: :prevent_achievement_removal

   def prevent_achievement_removal( join_model )
     errors.add( :base, "Cannot remove an achievement this way !" )
     raise ::ActiveRecord::RecordInvalid
   end

 end

ドキュメントによると、コールバックでエラーが発生した場合、レコードは削除されません。しかし、これについては何かが正しく感じられません.私はより良い解決策を考えようとします.

于 2013-06-05T13:48:14.757 に答える