У меня есть модель страны (которая совпадает с '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
И получите желаемый результат.