2010-06-24 11 views
1

J'ai trois classes qui doivent être liées, et je ne suis pas sûr de savoir comment le faire.Association de deux ressources, déjà associées

La classe User, est bien sûr pour un utilisateur, Game représente un jeu, GameTurn représente un tour dans la partie. Le jeu appartient à un utilisateur, l'utilisateur qui a initié le jeu, et GameTurn appartient à un utilisateur, l'utilisateur qui a joué ce tour. Ce que je veux faire est d'associer l'utilisateur et le jeu à GameTurn, ainsi je peux rapidement obtenir une liste de joueurs dans un jeu, et une liste de jeux auxquels un joueur a joué. Je ne suis pas sûr de savoir comment faire Ceci, et ne veut pas gâcher quoi que ce soit puisque le jeu appartient déjà à un utilisateur. (les propriétés non liées ont été supprimées si possible, pour rendre les définitions plus lisibles).

Voici les définitions de classes pertinentes

class User 
    include DataMapper::Resource 

    property :id, Serial 
    property :name, String 
    property :created_at, DateTime 
    property :password, BCryptHash 

    has n, :gameTurns 
end 

class Game 
    include DataMapper::Resource 
    property :id, Serial 
    property :created_at, DateTime 
    property :finished, Boolean, :default=>false 
    property :finished_at, DateTime 
    property :length, Boolean #Number of turns 

    has n, :gameTurns 
end 

class GameTurn 
    include DataMapper::Resource 
    property :id, Serial 
    property :isText, Boolean 
    property :text, String 
    property :image, Text 

    belongs_to :game 
    belongs_to :user 
end 

Je suis assez inexpérimenté avec ORM en général, si l'une de ces associations peuvent être mieux fait d'une autre manière, s'il vous plaît laissez-moi savoir.

Merci

Répondre

2

Je n'ai jamais utilisé datamapper, mais je crois que ce que vous avez besoin est quelque chose comme

class User 
    # ... 
    has n, :gameTurns 
    has n, :games, :through => :gameTurns 
end 

class Game 
    # ... 
    has n, :gameTurns 
    has n, :users, :through => :gameTurns 
end 

class GameTurn 
    # ... 
    belongs_to :game 
    belongs_to :user 
end 
+0

Quelqu'un peut-il confirmer si ce que je veux? J'imagine qu'il pourrait y avoir des problèmes puisque le jeu appartient déjà à un utilisateur (d'une manière différente de ce que je veux que cette relation soit) –

+0

oh attends! Je n'ai pas fait ça. Désolé, je pensais que chaque jeu appartenait à un utilisateur, celui qui a commencé, mais je me suis juste rendu compte que je ne l'ai pas fait parce que je me fous de qui a commencé le jeu (et si j'ai besoin de savoir, c'est la première personne jouer), donc il n'y a pas d'ambiguïté, et cela fonctionne. Merci! –

+0

Je suis heureux de pouvoir aider:] –