2013-11-23 6 views
0

У меня есть следующие настройки:Несколько внешних ключей с Рубином на Rails

Один matchdays таблицы с колонкой под названием home_team_id и один называется visitor_team_id и team стола.

My Match модель выглядит следующим образом:

class Match < ActiveRecord::Base 

    belongs_to :home_team, class_name: "Team", foreign_key: :home_team_id 
    belongs_to :visitor_team, class_name: "Team", foreign_key: :visitor_team_id 
    belongs_to :matchday 

    validates :home_team, presence: true 
    validates :visitor_team, presence: true 
end 

И модель команды так:

class Team < ActiveRecord::Base 
    has_many :matches 
    has_many :player 
end 

Теперь это становится сложно (по крайней мере для меня). Я хотел бы иметь возможность позвонить team.matches и получить все совпадения для команды. Поскольку у каждой команды есть домашние игры, а также игры на дороге.

В настоящее время я получаю ActiveRecord::StatementInvalid Ошибка, так как она ищет столбец team_id в таблице матчей.

ответ

0

Так что если я правильно понимаю, вам нужен всего лишь метод, который возвращает все игры, в которых играет текущая команда. Это должно сделать трюк:

class Team < ActiveRecord::Base 
    has_many :player 

    def matches 
    Team.where(home_team_id => self.id, foreign_key => self.id) 

    # This line will also work if you want to try it out. 
    # Team.where("home_team_id = ?", self.id).where("foreign_key = ?", self.id) 
    end 
end 

Счастливое кодирование!

+0

'дом = Match.where (: home_team_id => self.id) посетитель = Match.where (: visitor_team_id => self.id) возвращение домой + visitor' сделал это. Но мне это кажется странным –

Смежные вопросы