Module to support validation and errors with Active Resource objects. The module overrides Base#save to rescue ActiveResource::ResourceInvalid exceptions and parse the errors returned in the web service response. The module also adds an errors collection that mimics the interface of the errors provided by ActiveRecord::Errors.

Example

Consider a Person resource on the server requiring both a first_name and a last_name with a validates_presence_of :first_name, :last_name declaration in the model:

  person = Person.new(:first_name => "Jim", :last_name => "")
  person.save                   # => false (server returns an HTTP 422 status code and errors)
  person.valid?                 # => false
  person.errors.empty?          # => false
  person.errors.count           # => 1
  person.errors.full_messages   # => ["Last name can't be empty"]
  person.errors.on(:last_name)  # => "can't be empty"
  person.last_name = "Halpert"
  person.save                   # => true (and person is now saved to the remote service)
Methods
Public Instance methods
errors()

Returns the Errors object that holds all information about attribute error messages.

     # File activeresource/lib/active_resource/validations.rb, line 286
286:     def errors
287:       @errors ||= Errors.new(self)
288:     end
save_with_validation()

Validate a resource and save (POST) it to the remote web service.

     # File activeresource/lib/active_resource/validations.rb, line 258
258:     def save_with_validation
259:       save_without_validation
260:       true
261:     rescue ResourceInvalid => error
262:       case self.class.format
263:       when ActiveResource::Formats[:xml]
264:         errors.from_xml(error.response.body)
265:       when ActiveResource::Formats[:json]
266:         errors.from_json(error.response.body)
267:       end
268:       false
269:     end
valid?()

Checks for errors on an object (i.e., is resource.errors empty?).

Examples

  my_person = Person.create(params[:person])
  my_person.valid?
  # => true

  my_person.errors.add('login', 'can not be empty') if my_person.login == ''
  my_person.valid?
  # => false
     # File activeresource/lib/active_resource/validations.rb, line 281
281:     def valid?
282:       errors.empty?
283:     end