0

私は、関連付けを通してhas_manyを入れ子にして実装しようとしています。私はアンパイアを通してチームとマッチの関係を確立する必要があります。私は関連付けを通して5つのhas_manyを使ってそれをしません。私Umpire.first.matches作品についてRails has_many、ネストされた関連付けを達成する方法は?

class Team < ApplicationRecord 
    has_many :umpires 
    has_many :matches, through: :umpires 
end 

class Umpire < ApplicationRecord 
    belongs_to :team 
    has_many :matches, -> (umpire){ unscope(where: :umpire_id).where('matches.first_umpire_id = :umpire_id OR matches.second_umpire_id = :umpire_id', umpire_id: umpire.id,)} 
end 

class Match < ApplicationRecord 
    # first_umpire_id (integer) 
    # second_umpire_id (integer) 
end 

が、私はTeam.first.matchesをしようとすると、私は次のエラーを取得:ここ

は私のモデルである

ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'matches.umpire_id' in 'on clause': SELECT `matches`.* FROM `matches` INNER JOIN `umpires` ON `matches`.`umpire_id` = `umpires`.`id` WHERE `umpires`.`team_id` = 1 AND (matches.first_umpire_id = 1 OR matches.second_umpire_id = 1)

答えて

0

Umpireモデルは、のための1つを2体のbelongs_to関係を持っている必要がありますがTeamモデル、Matchモデルのモデルです。また、Matchモデルの場合は、双方向でアクセスできるようにするには、has_many throughの関連付けも必要です。

コードは次のようになります。あなたはあなたの移行を適切に設定している場合

class Team < ApplicationRecord 
    has_many :umpires 
    has_many :matches, through: :umpires 
end 

class Umpire < ApplicationRecord 
    belongs_to :team 
    belongs_to :match 
end 

class Match < ApplicationRecord 
    has_many :umpires 
    has_many :teams, through: :umpires 
end 

この例では、動作するはずです。

+0

マッチには、2つのアンパイア「first_umpire_id」、「second_umpire_id」があります。アンパイアは、第1審判または第2審判としての試合に関連付けることができます。この修正プログラムが動作するかどうかは不明です。 –

関連する問題