2010-03-13 3 views
1

Я новичок в рельсах и добровольно вызвался помочь местной команде High School Track с простой базой данных, которая отслеживает выступления бегунов. На данный момент у меня есть три модели: Runners, Race_Data и Races. У меня есть следующие ассоциации.ActiveRecord Associations Вопрос

Runners have_many Race_Data 
Races have_many Race_Data 

Я также хочу создать ассоциацию Runners Have_Many мчится через Race_Data, но, как мой взгляд на диаграмме я нарисовал, уже есть много, чтобы одно отношение от Race_data к гонкам. Имеет ли комбинация Runners множество Race_Data и Race_Data, имеющих одну Race, подразумевает отношения Many_to_Many между Runners и Races?

ответ

1

Взаимосвязь, которую вы описываете, подразумевается, но использование ее предполагает более сложный код, чем может потребоваться. Я думаю, что вы хотите что-то более, как

class Runner < ActiveRecord::Base 
    has_many :entries 
    has_many :races, :through => :entries 
end 
class Race < ActiveRecord::Base 
    has_many :entries 
    has_many :runners, :through => :entries 
end 
class Entry < ActiveRecord::Base 
# I suggest this is a more expressive name than "Race_Data" 
    belongs_to :runner 
    belongs_to :race 
end 

Это должно быть достаточно, чтобы сделать такие вещи, как это:

bob = Runner.new(:name=>'Bob') 
joe = Runner.new(:name=>'Joe') 
race = Race.new(:race_date=>'20100313') 
race.entries.create(:runner=>joe, :position=>1) 
race.entries.create(:runner=>bob, :position=>2) 
bob.races.all #=> [#<Race id: 1, race_date: "2010-03-13"] 
bob.entries.all #=> => [#<Entry id: 2, runner_id: 1, race_id: 1, position: 2] 
+0

Майк, Спасибо за ваш большой отклик. Также большое предложение по использованию записей вместо race_data. Джим – Mutuelinvestor