プログラミングのメモ帳

自分のメモとして残したいアウトプット

特定のvalidationをスキップする

WEBサービスを作っている際に、
「passwordのバリデーションが邪魔だな、、、、」と思う場面がありました。

具体的にはユーザーのプロフィールを変更する時にパスワードを入力せずに更新したい、 つまりパスワードのバリデーションのみ適用無しにしたい、というケースでした。 いくつか方法があるようです。

onオプションを使用する

onオプションを使用すれば特定のアクションにのみバリデーションを適用できます。

#例(createアクションのみにpresenceが適用される)
validates :name, presence: true, on: :create

before_actionやrouteのonlyオプションのイメージですね

update_columnsを使う(非推奨)

バリデーションをそもそも行わないupdate_columnsを使う。
しかし全てのカラムからvalidationが外れてしまうので非推奨。 カラム1つだけの更新であればupdate_columnを使う手もありますが
今回はpassword以外の複数カラムを更新したいので使えません。