Возможны ли две ассоциации из одной модели? - PullRequest
0 голосов
/ 29 декабря 2011

У меня есть модель страны (которая совпадает с 'Team') и модель Match, и я пытаюсь создать сценарий, в котором у меня есть запись матча с домашней и выездной командами.

Модели

class Country < ActiveRecord::Base
  has_many :home_matches, :foreign_key => 'home', :class_name => "Match"
  has_many :away_matches, :foreign_key => 'away', :class_name => "Match"
end

class Match < ActiveRecord::Base
  belongs_to :home, :class_name => "Country", :foreign_key => "home"
  belongs_to :away, :class_name => "Country", :foreign_key => "away"
end

Схемы

  create_table "countries", :force => true do |t|
    t.string   "name"
    t.text     "bio"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "matches", :force => true do |t|
    t.datetime "matchdate"
    t.integer  "home"
    t.integer  "away"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

Задача

Это хорошо работает, если я просто хочу:

> canada.away_matches
> japan.home_matches

Но как мне получить все матчи, которые играет страна?

Обновление:

Я нашел ответ в другом ответе. ActiveRecord имеет две ассоциации

Я обновил модель моей страны следующим кодом:

def matches
  Match.where("home = ? OR away = ?", self, self)
end

Теперь я могу запросить:

> canada.home_matches
> canada.away_matches
> canada.matches

И получите желаемый результат.

1 Ответ

1 голос
/ 29 декабря 2011

Вы устанавливаете ассоциации неправильно.
Пройдите через это

  1. Single_Table_Inheritance wiki и
  2. одной таблицы наследования и, где в использовании, он в рельсах
...