web-dev-qa-db-ja.com

rails 4 before_validation on::createまたはon::save

私は私の頭を回避しているケースを持っています。

アップロードされた場合にのみ保存した​​い画像モデルがあります。また、画像を検証するためにアップロードからの情報も必要です(高さや幅など)。しかし、誰かがファイルを初めてイメージに保存しようとする場合にのみ、アップロードが行われるようにします。

だから、最良の選択肢はbefore_validation、しかし保存時にのみ実行したい!

私のコードはこの要点にあります https://Gist.github.com/andreorvalho/b21204977d2b70fdef8

奇妙な部分はこれですon: :saveおよびon: :createは本当に奇妙な振る舞いをしている、または少なくとも私が期待したものではない。

on: :save私がimage.saveテストでbefore_validationコールバックは実行されません!

on: :createはすべての状況で実行されますが、私がimage.saveimage.createまたはimage.valid?

だから私はこれが機能していないか、設定上のそれらの目標を誤解していると推測しています。

追伸作成時の検証は、保存、作成、または有効なあらゆる状況でも発生しますか?

誰かが同じに遭遇したかどうか、またはなぜこのように動作するはずがないのかを知ってください。

32
andre.orvalho

before_validationコールバックは、オブジェクトのライフサイクル内の特定のイベントに対する制限を許可します。

次の構文を使用できます。

before_validation :set_uuid, on: :create
before_validation :upload_to_system, on: [:create, :update]

Rails 4.Rails 5.2 、および Rails 6. のこのオプションのドキュメントを次に示します。

63
Jon