Соединение двух ресурсов, которые уже связаны

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

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

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

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

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

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

Спасибо

1
задан Jeffrey Aylesworth 24 June 2010 в 00:45
поделиться

1 ответ

Я никогда не использовал 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
2
ответ дан 2 September 2019 в 23:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: