我确定这已被问过一百万次了。我不是很好。我有以下设置:我有一个有许多事件的教练。每个活动只有一名教师(所有者/创建者)。我想添加一个单独的链接,以允许其他教师关联但仍保留原始教师(所有者)。我有一个粗略的ASCII表示,但我不能在我的生活中找出如何在rails模型中做到这一点。
,-------------------.
| other_instructors |
|-------------------|
| event_id |-------------.
,---------------| instructor_id | |
| `-------------------' |
| ,---------------------. |
`->>| instructor |<--. |
|---------------------| | ,------------. |
| name | | | event |<-'
| email | | |------------|
| office | | | title |
| phone | | | location |
| admin? | | | benefit |
| notify_recipient? | | | notes |
| new_user? | | | start_time |
| (acts_as_authentic) | | | end_time |
`---------------------' | | live_in? |
`---| instructor |
`------------'
@instructor.events = [... array of events ...]
@associated_events = [... array of events associated but not owned via other_instructors table ...]
@event.instructor = ... One Instructor ...
@event.other_instructors = [... array of other instructors ...]
答案 0 :(得分:1)
ASCII码为2分。
我对Rails一无所知,但是从event
表中取出教师外部引用并将is_primary_instructor
位字段添加到关联的事件表中会更有意义吗?
答案 1 :(得分:1)
同意Shlomo。
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