2016-05-15 7 views
0

私は、現時点ではレール上のルビーを使って作業しています。私のモデルの間の関係を狭くしようとしています。MatchesTeams2チーム間でのマッチのためのレールマイグレーション

の場合は1回、awayTeamの場合は1回、Teamsテーブルを参照するようにしたいと考えています。私の最大の疑問は、自分のモデルで関係を間違って宣言していることでしょうか?

現時点では、私は試合でチームの名前を呼ぶことさえできません。

私は、teamMatchesを呼び出して、チームが持っているすべての試合を、homeTeamまたはawayTeamとしてリストされているかどうかリストすることができ、最終的に特定のチームのホームマッチまたはアウェイマッチを呼び出すことができます。

また、Match.teams/Match.homeTeam/Match.awayTeamを呼び出して、特定の試合のチームをリストしたいと考えています。

ここで私がこれまで持っているものです。

マッチ移行

class CreateMatches < ActiveRecord::Migration def change create_table :matches do |t| t.references :homeTeam t.references :awayTeam end end end

マッチモデル

class Match < ActiveRecord::Base has_one :homeTeam, :class_name => 'Team' has_one :awayTeam, :class_name => 'Team' end

チームモデル

class Team < ActiveRecord::Base has_and_belongs_to_many :matches end

ありがとうございます!

答えて

0

あなたはこのようにそれを行うことができます。

class Match < ActiveRecord::Base 
    belongs_to :hometeam, :class_name => 'Team' 
    belongs_to :awayteam, :class_name => 'Team' 

#if you want to select all teams of a match, you can create a method 
def teams 
    Team.find(self.hometeam_id, self.awayteam_id) 
end 
end 

class Team < ActiveRecord::Base 
    has_many :home, class_name: 'Match', foreign_key: 'hometeam_id' 
    has_many :away, class_name: 'Match', foreign_key: 'awayteam_id' 
end 
+0

私は 'Players'テーブルを組み込み、それらのモデルを使用してMatch.homeTeam/Match.awayTeamの選手を呼ぶことができるだろうか、私はする必要がありますチームをマッチにも参加させる方法を見つけますか?あなたはこのMatch.find(your_match_id).hometeam.players'のような選手に電話をして、すべてのホームチームを見つけることができます。 「Match」 「has_many:teams」「has_many:players、through::teams」 – DesertOctopi

+0

既にプレイヤーとチームの関連付けを宣言している場合に限ります。 – pyfl88