[LRUG] Binding the creation of 2+ objects together
    Kenneth Lee 
    kenfodder at gmail.com
       
    Thu Jul 31 10:28:23 PDT 2008
    
    
  
Here's a quick demo of validates_associated that I was convincing myself 
of it working...
class Vehicle < ActiveRecord::Base
  has_one :registration, :dependent => :destroy
 
  validates_presence_of :name
  validates_associated :registration
 
  def before_validation_on_create
    self.registration = Registration.new()
  end
end
class Registration < ActiveRecord::Base
  belongs_to :vehicle
  validates_presence_of :number_plate
end
In the console:
 >> Vehicle.destroy_all
=> []
 >> Registration.destroy_all
=> []
 >> v = Vehicle.create
=> #<Vehicle id: nil, name: nil, created_at: nil, updated_at: nil>
 >> v.errors
=> #<ActiveRecord::Errors:0x1868e80 @base=#<Vehicle id: nil, name: nil, 
created_at: nil, updated_at: nil>, @errors={"name"=>["can't be blank"], 
"registration"=>["is invalid"]}>
 >> Vehicle.count
=> 0
 >> Registration.count
=> 0
 >> v = Vehicle.create :name => 'cheese'
=> #<Vehicle id: nil, name: "cheese", created_at: nil, updated_at: nil>
 >> v.errors
=> #<ActiveRecord::Errors:0x1829078 @base=#<Vehicle id: nil, name: 
"cheese", created_at: nil, updated_at: nil>, 
@errors={"registration"=>["is invalid"]}>
 >> v.registration.errors
=> #<ActiveRecord::Errors:0x18283f8 @base=#<Registration id: nil, 
number_plate: nil, vehicle_id: nil, created_at: nil, updated_at: nil>, 
@errors={"number_plate"=>["can't be blank"]}>
 >> Vehicle.count
=> 0
 >> Registration.count
=> 0
 >> _
Obviously this will always be the case until I initialize it with a 
number_plate, but you get the general idea.
Anthony Green wrote:
> Has anyone encountered a situation in which the business rules state that a
> object can't be saved unless its twin is saved too ?
>
> I'm seeing this is pattern repeated where an object with a has_one
> relationship to a twin is created but you need to check its twin has created
> as well and that both will save. You can't create one entry in a table
> without a corresponding entry in a different table.
>
> Does anyone know of an extension to the association declaration that
> enforces these kind of rules. A source of creation version of :dependent =>
> :destroy
>
> Tony
>
>
> _______________________________________________
> Chat mailing list
> Chat at lists.lrug.org
> http://lists.lrug.org/listinfo.cgi/chat-lrug.org
>
>   
    
    
More information about the Chat
mailing list