validatesの「on」は以下のように使われます。

# create
validates :email, presence: true, on: :create
# update
validates :email, presence: true, on: :update

 『:create』はモデルデータを最初に作成するときにバリデーションが実行され、『:update』はモデルデータを更新するときにバリデーションが実行されます。

アクションの『create』『update』ではない。saveが『作成』か『更新』か。

 私も最初勘違いしていたが、この『create』『update』がアクションだと思って、他のアクションでsaveした時は『on: :アクション名』とすれば良いと思ってました。しかし、参考のStackoverflowにも書かれてあるとおり、この『create』『update』はsaveする際に『作成』するのか『更新』するのかということなので、あるアクションでvalidateを実行したいとき『on』には、モデルデータを作成するなら『create』、更新するなら『update』すれば良いということです。

参考

Rails validation on custom action – Stack Overflow

Rails – 状況によってsave時に実行するバリデーションを切り替える – Qiita