0

テーブル「チーム」と「スケジュール」を関連付ける/結合する最善の方法を見つけようとして問題が発生しています。私のモデルは次のとおりです。

class Team < ActiveRecord::Base
  attr_accessible :city, :conf, :div, :key, :name
  self.primary_key = "key" #Abbreviations for strings 'CHI', 'TB', 'SEA' etc.

  has_many :schedules, foreign_key: [:away_team, :home_team]
end

class Schedule < ActiveRecord::Base
  attr_accessible :away_team, :date, :home_team, :season, :week, :team_key
  self.primary_keys = :away_team, :home_team #Abbreviations for strings 'CHI', 'TB', 'SEA' etc.

  belongs_to :team, primary_key: "key"
end

gem "composite_primary_keys", "~> 5.0.13" をインストールしました。

変数を割り当てるときのレールコンソールで

>> team = Team.find("SEA")

SELECT "teams".* FROM "teams" WHERE "teams"."key" = ? LIMIT 1  [["key", "SEA"]]
=> #<Team key: "SEA", city: "Seattle", name: "Seahawks", conf: "NFC", div: "West">

シアトルを完全に表示しますが、実行すると:

>> team.schedules

SELECT "schedules".* FROM "schedules" WHERE ("schedules"."away_team" = 'SEA' AND "schedules"."home_team" IS NULL) 
=> []

「スケジュール」テーブルには、home_team 列に「SEA」のデータがあります。

結合テーブルはより良い解決策でしょうか? もしそうなら、どのようにしますか?どんな助けでも大歓迎です!

4

1 に答える 1

1

まず、複合キーを使用する必要がない場合は使用しないでください (この場合は使用しません)。
主キーは、制約やビジネス ロジックではなく、個々の項目にアクセスするためのものです。
あなたの場合、プライマリ インデックスを使用して home_team でスケジュールを選択することはできません。

また、Rails の規則を可能な限り使用することをお勧めします。それは生活を楽にします。id主キーおよびテーブルの結合に使用します。

あなたのスケジュールは2 つのチームに属しており、チームには 2 種類のスケジュール (ホームとアウェイ) があるようです。したがって、モデルは次のようになります。

class Team < ActiveRecord::Base
  attr_accessible :city, :conf, :div, :key, :name

  has_many :home_schedules, class_name: 'Schedule', foreign_key: :home_team_id
  has_many :away_schedules, class_name: 'Schedule', foreign_key: :away_team_id

  def schedules
    home_schedules + away_schedules
  end
end

class Schedule < ActiveRecord::Base
  attr_accessible :away_team, :date, :home_team, :season, :week, :team_key

  belongs_to :home_team, class_name: 'Team'
  belongs_to :away_team, class_name: 'Team'
end

それから

team = Team.find_by_key('SEA')
team.schedules

追加した

私はモデルを生成します

rails g model Team city conf div short_cut name
rails g model Schedule day:date season week:integer home_team_id:integer away_team_id:integer

team_idに追加することで、チームをファンにリンクしFanます。チームの short_cut (以前の key 属性と名付けました) を使用してチームを表示または選択することはいつでもできますが、Railsidにすべての内部的なものを使用させます。

于 2013-05-30T09:21:30.200 に答える