2010-11-28 19 views
5

Bir başarının iki yolu, activerecord ile ilişkisine sahip olmanın en iyi yolu nedir?ActiveRecord, iki ilişkilendirmeye sahiptir

Bir Takım ve Oyun modelim var. Her takımda_many oyunları var @team.games. Bir oyun iki takım @game.hosting_team ve @game.opposing_team olacaktır.

İki belongs_to/has_one dernek ile başlattım ama daha sonra @team.games yalnızca kendi ev oyunlarını döndürürdü.

Düşünebildiğim diğer seçenek HABTM kullanmaktır ve yalnızca kayıt olduğundan emin olmak için bir doğrulayıcı kullanmaktadır. Eksik olan tek şey ev takımını takip etmektir. Bir dernek ile bir çok ihtiyacı var gibi görünüyor ama tam olarak emin değilim ...

Yardımlarınız için teşekkürler.

Bu, iki has_many ilişkilendirmesinin nasıl göründüğüne bir örnektir. Buradaki sorun ben böyle bir şey istiyorum oyunlarına

class Team < ActiveRecord::Base 
    has_many :games 
    has_many :opponents, :class_name => "Team"#, :foreign_key => "" 
end 

class Game < ActiveRecord::Base 
    belongs_to :team, :class_name => "Team" #, :foreign_key => "team_id" 
    belongs_to :opponent, :class_name => "Team" #, :foreign_key => "opponent_id" 
end 

tam bir listesini elde etmek için team.games ve team.opponents aramak zorunda kalacak ama nasıl işler belongs_to bu besbelli değil.

class Team < ActiveRecord::Base 
    has_many :games 
end 

class Game < ActiveRecord::Base 
    belongs_to :hosting_team 
    belongs_to :opposing_team 
end 

İstenilen api'm buna benzer.

@team.games # return all games home or away 
@game.hosting_team # Team 
@game.opposing_team # Team 
+0

Eğer modelin ilişkilerini calrify ve Can belki db/schema.rb'nizi gönderebilir misiniz? –

+0

Teşekkürler. Soruyu düzenledim. – jspooner

cevap

3

Muhtemelen hala bt/ho dernekler ile modellemek ve takımda bir erişimci yöntemi olarak yerine bir dernek olarak oyunlar ayarlayabilirsiniz:

class Team < ActiveRecord::Base 
    def games 
    Game.find(:conditions => ["home_team_id = ? OR away_team_id = ?", id, id]) 
    end 
end 
+0

Evet, iyi fikir. Ekibim modelim have_many: home_games ve have_many away_games. Sonra oyun yönteminiz her ikisini de seçerdi. Teşekkürler bu muhtemelen cevaptır. – jspooner