2010-11-28 11 views
5

¿Cuál es la mejor manera de lograr que a tenga dos asociaciones con activerecord?ActiveRecord tiene dos asociaciones

Tengo un equipo y modelos de juego. Cada equipo tendrá_muchos juegos @team.games. Un juego tendrá dos equipos @game.hosting_team y @game.opposing_team.

Empecé con dos asociaciones belongs_to/has_one pero luego @team.games solo devolvería sus juegos de casa.

La otra opción que puedo pensar es usar una HABTM y usar un validador para asegurar que solo haya registros. Lo único que falta es hacer un seguimiento del equipo local. Parece que necesito un tiene muchas asociaciones pero no estoy muy seguro ...

Gracias por su ayuda.

Este es un ejemplo de cómo se ven las dos asociaciones de has_many. El problema aquí es que tendría que llamar team.games y team.opponents para obtener una lista completa de sus juegos

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 

me gustaría algo como esto, pero esto obviamente no es la forma en belongs_to obras.

class Team < ActiveRecord::Base 
    has_many :games 
end 

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

Mi api deseada se vería así.

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

Puede usted calrify las relaciones del modelo y tal vez publicar su db/schema.rb? –

+0

Gracias. Edité la pregunta. – jspooner

Respuesta

3

Puede probablemente todavía modelarlo con las asociaciones bt/ho, y establecer juegos como un método de acceso en el equipo en lugar de como una asociación:

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

Sí, buena idea. Mi modelo de equipo tendría_many: home_games y have have_many away_games. Entonces el método de tu juego los seleccionaría a ambos. Gracias, esta es probablemente la respuesta. – jspooner

Cuestiones relacionadas