class User < ActiveRecord::Base with_options if: :should_validate_password? do |user| user.validates_presence_of :password user.format_of :password, with: /^[^\s]+$/ end attr_accessor :updating_password def should_validate_password? updating_password || new_record? end end class Account < ActiveRecord::Baase with_options dependent: :destroy do |acc| acc.has_many :customers acc.has_many :products acc.has_many :invoices acc.has_many :expenses end end
This is a convenient method to be aware of. When there are numerous records that have the same options, then using
with_options could clean up the code and it more DRY.
with_options() method accepts the options as the first argument, then it accepts a block for the model class. This argument is the object used to call the validations on. In the case of
user.validates_presence_of :password does the normal presence validation, but adds the benefit of using the