Согласен со Шломо.
class Instructor < ActiveRecord::Base
has_many :instruct_events
has_many events, :through => :instruct_events
end
class InstructEvent < ActiveRecord::Base
belongs_to :instructor
belongs_to :event
end
class Event < ActiveRecord::Base
has_many :instruct_events
has_many :instructors, :through => :instruct_events
end
class CreateInstructors < ActiveRecord::Migration
def self.up
create_table :instructors do |t|
# name, email, etc
t.timestamps
end
end
end
class CreateInstructEvents < ActiveRecord::Migration
def self.up
create_table :instruct_events do |t|
t.integer :instructor_id
t.integer :event_id
t.boolean :is_primary_instructor
t.timestamps
end
end
end
class CreateEvents < ActiveRecord::Migration
def self.up
create_table :events do |t|
# title, location, etc
t.timestamps
end
end
end
Таким образом, у каждого инструктора есть много событий, и у каждого события есть много инструкторов. Но вы должны определить одного инструктора в качестве основного инструктора.
===== ОБНОВЛЕНИЕ =====
Для ссылки на основного инструктора:
class InstructEvent
# add this:
named_scope :primary, :conditions => { :is_primary_instructor => true }
end
Если дано событие, найдите основного инструктора этого события:
event.instruct_events.primary.instructor
данный инструктор, найдите событие, которое инструктор является основным:
instructor.instruct_events.primary.event
Может быть, вы могли бы дать классу InstructEvents лучшее имя.
А также я надеюсь увидеть и более красивые решения: D