On Aug 10, 8:42 pm, Leigh Daniels <[email protected]> wrote: > Hi All, > > Here's my situation. People have Availability for Events. I need to ensure > that each Person is Available for each Event exactly once. > > I'm thinking the way to do it would be with a before_save method in > Availability that does an > > Availability.find("event_id = ? and person_id = ?", record.event_id, > record.person_id) > > and complains if it finds one. > > Is this the way to go or is there a better approach?
I'd stick a unique index on that pair of columns too - it's the only way to get a cast iron guarantee for this sort of thing. Fred > > **Leigh > > ============= > > #Person.rb > class Person < ActiveRecord::Base > has_many :availabilities > has_many :events, :through => :availabilities > default_scope :order => 'name ASC' > validates_presence_of :name, :on => :create, :message => "-- You need to > enter your name" > end > > #Availability.rb > class Availability < ActiveRecord::Base > belongs_to :event > belongs_to :person > validates_presence_of :person_id, :on => :create, :message => "can't be > blank" > validates_presence_of :event_id, :on => :create, :message => "can't be > blank" > end > > #Event.rb > class Event < ActiveRecord::Base > has_many :availabilities > has_many :people, :through => :availabilities > > default_scope :order => 'date ASC' > validates_presence_of :name, :on => :create, :message => "can't be blank" > validates_presence_of :date, :on => :create, :message => "can't be blank" > end > > # Schema.rb > ActiveRecord::Schema.define(:version => 20110809224443) do > create_table "availabilities", :force => true do |t| > t.integer "event_id" > t.integer "person_id" > . . . > end > > create_table "events", :force => true do |t| > t.string "name" > t.datetime "date" > . . . > end > > create_table "people", :force => true do |t| > t.string "name" > . . . > end > end -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

