ActiveRecord Ассоциация Вопрос - PullRequest
1 голос
/ 13 марта 2010

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

Runners have_many Race_Data
Races have_many Race_Data

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

1 Ответ

1 голос
/ 13 марта 2010

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

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...