特定の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以外の複数カラムを更新したいので使えません。