railsで条件つきvalidationをする方法
A, B, Cがあり、Aをしたら、B,Cがvalidationを行うという状況をしたかったです。
こんなことってありませんか?
あまりないのかもしれない・・・
やり方
with_options
を使えば特定の条件下で複数のvalidationをかけることができます。
個別で行いたい場合は、if: ~
とvalidatesの後に書くことでできます。
参考
Active Record バリデーション | Rails ガイド
今回はバナーの位置を表示したく、位置情報が選択されたらバナーの情報をvalidationをかけたかったのです。
enum
を使っていますが、下記のようになります。
Banner < ActiveRecord::Base enum position: %w(nothing top bottom both) with_options unless: :nothing? do validates :url, presence: true, format: /\A#{URI::regexp(%w(http https))}\z/ validates :title, presence: true, length: { maximum: 100 } end end
positionの値がnothingでなければ、二つのvalidationをかけるというようにしました。
以上です。