0

私が持っているいくつかのモデルをどのように関連付けるかについて、私はちょっと困惑しています。いくつかの指針やアイデアを期待していました!

「MinorTeam」、「MajorTeam」、「Game」という名前の3つのモデルがあるとします。各ゲームは2つのチームを参照します。しかし、それがメジャーチームかマイナーチームかをどのように指定すればよいですか?

has_one :team_1, :class_name => "MajorTeam"
# or 
has_one :team_1, :class_name => "MinorTeam"

2つのチームモデルは大幅に異なるため、チームモデルにメジャー/マイナーフラグを単純に追加することはできませんでした。何か案は?

4

1 に答える 1

0

ポリモーフィックアソシエーションは機能するはずです。それを正しくするために少し調整する必要があるかもしれませんが、それらを使用することで、ゲームを持っていることを除いて、チームクラスは同じものである必要はありません。

module Team
  extend ActiveSupport::Concern
  included do
    has_many :home_games, :class_name => "Game", :as => :team_1
    has_many :away_games, :class_name => "Game", :as => :team_2
  end
end

class MajorTeam < ActiveRecord::Base
  include Team
end

class MinorTeam < ActiveRecord::Base
  include Team
end

class Game < ActiveRecord::Base
  belongs_to :team_1, :polymorphic => true
  belongs_to :team_2, :polymorphic => true
end

各チームが1つのゲームにのみ属していることを意味has_oneするのでbelongs_to、あなたはあなたがそうするつもりだったと思いますが、それは間違っているようです。has_one私が間違っている場合は、私に知らせてください。

于 2013-01-20T00:09:24.770 に答える