Связывание двух ресурсов, которые уже связаны - PullRequest
1 голос
/ 24 июня 2010

У меня есть три класса, которые нужно связать, и я не знаю, как это сделать.

Класс User, конечно для пользователя, Game представляет игру, GameTurn представляет поворот в игре. Игра принадлежит пользователю, пользователю, который инициировал игру, а GameTurn принадлежит пользователю, пользователю, который сыграл этот ход.

Что я хочу сделать, так это связать пользователя и игру через GameTurn, чтобы я мог быстро получить список игроков в игре и список игр, в которые играл игрок. Я просто не уверен, как это сделать и не хочу ничего портить, так как Game уже принадлежит пользователю. (несвязанные свойства были удалены там, где это было возможно, чтобы сделать определения более читабельными).

Вот соответствующие определения классов

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

Я вообще не очень разбираюсь в ORM, поэтому, если какая-либо из этих ассоциаций может быть лучше сделана другим способом, пожалуйста, дайте мне знать.

Спасибо

1 Ответ

2 голосов
/ 24 июня 2010

Я никогда не использовал datamapper, но я считаю, что вам нужно что-то вроде

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
...