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)
Returns the Errors object that holds all information about attribute error messages.
[ show source ]
# File activeresource/lib/active_resource/validations.rb, line 286
286: def errors
287: @errors ||= Errors.new(self)
288: end
Validate a resource and save (POST) it to the remote web service.
[ show source ]
# 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
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
[ show source ]
# File activeresource/lib/active_resource/validations.rb, line 281
281: def valid?
282: errors.empty?
283: end