У меня есть три класса, которые должны быть связаны, и я не уверен, как сделать это.
Пользовательский класс, конечно, для пользователя, Игра представляет игру, 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 в целом, поэтому если какая-либо из этих ассоциаций может быть лучше сделана иначе, сообщите мне.
Спасибо
Я никогда не использовал 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