关联已经相关的两个资源

时间:2010-06-24 00:45:30

标签: ruby orm datamapper

我有三个需要相关的课程,我不知道该怎么做。

User类,当然是针对用户,Game代表游戏,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

我对ORM一般都缺乏经验,所以如果以其他方式做得更好,请告诉我。

由于

1 个答案:

答案 0 :(得分:2)

我从未使用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