Rails - `validate_with`
In Rails validation, when your validate condition belongs to many attributes,
you can not put any field to validates :field, custom_validator: true
.
validate_with
can help you. It passes the record off to the class or classes
specified and allows them to add errors based on more complex conditions.
For example: Your message need content OR attachment or both of them.
class Message
validates_with InfoValidator
end
class InfoValidator < ActiveModel::Validator
def validate record
record.errors.add :base, :invalid_info if has_no_info(record)
end
private
def has_no_info record
record.content.blank? && record.attachment.blank?
end
end