2

何らかの理由で、この検証を実行する必要があります

validates_presence_of :user_id

何らかのメソッドが呼び出されたとき

def publish # this method does not save nor update record
            # so validations are not run
  ...
end

私はこのように解決しました:

# model
validates_presence_of :user_id, if: :going_to_publish
attr_accessor :going_to_publish

# when calling publish
post.going_to_publish = true
post.publish

そのフラグ変数を削除する方法はありますか?

4

1 に答える 1

1

ここには必要性が見られません。

投稿を公開する場合、投稿 obj は永続的である必要があります。したがって、メソッドは内部で/メソッドをpublish呼び出す必要があります。createsave

そのようなメソッドが呼び出されると、検証ルールも呼び出されます。

追加

検証は更新にも機能します

新しいレコードを作成して保存すると、SQL INSERT 操作がデータベースに送信されます。既存のレコードを更新すると、代わりに SQL UPDATE 操作が送信されます。検証は通常、これらのコマンドがデータベースに送信される前に実行されます。検証に失敗した場合、オブジェクトは無効としてマークされ、Active Record は INSERT または UPDATE 操作を実行しません。

http://guides.rubyonrails.org/active_record_validations_callbacks.html#when-does-validation-happen

于 2013-06-20T17:19:06.667 に答える