Plugin allowing to auto build and validate associated records and merge validation errors
Examples
If you want automatically build specified associated recrods when new record is initialized you can use auto_build:
class Bar < ActiveRecord::Base
belongs_to :foo
end
class Foo < ActiveRecord::Base
has_one :bar
set_associated_records_to_auto_build :bar
end
foo = Foo.new
foo. # => #<Bar:0x...>
You can also validate associated record in easy way:
class Person < ActiveRecord::Base
has_one :address
validates_presence_of :name
validates_associated_record :address
delegate :street, :street=, :city, :city=, :state, :state=,
:zip, :zip=, :to => :address
end
class Address < ActiveRecord::Base
validates_presence_of :street, :city, :state, :zip
end
joe = Person.new
joe.valid? # => false
joe.errors.on(:name) # => "can't be blank"
joe.errors.on(:street) # => "can't be blank"
joe.errors.on(:city) # => "can't be blank"
joe.errors.on(:state) # => "can't be blank"
joe.errors.on(:zip) # => "can't be blank"
And of course merging errors in not associated records:
class Person < ActiveRecord::Base
validates_presence_of :name
end
class Address < ActiveRecord::Base
validates_presence_of :street, :city, :state, :zip
end
joe = Person.new
joe.valid? # => false
address = Address.new
address.valid? # => false
joe.errors.merge address.errors
joe.errors.on(:name) # => "can't be blank"
joe.errors.on(:street) # => "can't be blank"
joe.errors.on(:city) # => "can't be blank"
joe.errors.on(:state) # => "can't be blank"
joe.errors.on(:zip) # => "can't be blank"
Enjoy!