Method: ActiveModel::Errors#add
- Defined in:
- lib/reactive_record/active_record/errors.rb
#add(attribute, message = :invalid, options = {}) ⇒ Object
NOTE: strict option isn’t ported yet
Adds message to the error messages and used validator type to details on attribute. More than one error can be added to the same attribute. If no message is supplied, :invalid is assumed.
person.errors.add(:name)
# => ["is invalid"]
person.errors.add(:name, :not_implemented, message: "must be implemented")
# => ["is invalid", "must be implemented"]
person.errors.
# => {:name=>["is invalid", "must be implemented"]}
person.errors.details
# => {:name=>[{error: :not_implemented}, {error: :invalid}]}
If message is a symbol, it will be translated using the appropriate scope (see generate_message).
If message is a proc, it will be called, allowing for things like Time.now to be used within an error.
If the :strict option is set to true, it will raise ActiveModel::StrictValidationFailed instead of adding the error. :strict option can also be set to any other exception.
person.errors.add(:name, :invalid, strict: true)
# => ActiveModel::StrictValidationFailed: Name is invalid
person.errors.add(:name, :invalid, strict: NameIsInvalid)
# => NameIsInvalid: Name is invalid
person.errors. # => {}
attribute should be set to :base if the error is not directly associated with a single attribute.
person.errors.add(:base, :name_or_email_blank,
message: "either name or email must be present")
person.errors.
# => {:base=>["either name or email must be present"]}
person.errors.details
# => {:base=>[{error: :name_or_email_blank}]}
294 295 296 297 298 299 300 301 302 303 304 |
# File 'lib/reactive_record/active_record/errors.rb', line 294 def add(attribute, = :invalid, = {}) = .call if .respond_to?(:call) detail = normalize_detail(, ) = (attribute, , ) # if exception = options[:strict] # exception = ActiveModel::StrictValidationFailed if exception == true # raise exception, full_message(attribute, message) # end details[attribute.to_sym] << detail ([attribute.to_sym] << ).tap { reactive_empty! false } end |