2010-06-24 1 views
1

관련해야 할 세 가지 클래스가 있는데, 어떻게해야할지 모르겠습니다.이미 관련되어있는 두 개의 리소스를 연결합니다.

사용자 클래스는 물론 사용자를위한 것이며 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 

내가 일반적으로 ORMs 꽤 경험이있어 관련 클래스 정의, 그래서 이러한 협회의 더 나은 다른 방법을 할 수 있으면 알려 주시기 바랍니다.

감사

답변

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 
+0

같은 사람이 확인할 수있다 생각? 나는 게임이 이미 사용자와 관련되어 있기 때문에 문제가있을 것이라고 상상한다. (나는이 관계를 원한다. 다른 방식으로) –

+0

기다려라! 나는 그렇게하지 않았다. 죄송합니다. 각 게임은 사용자가 시작한 사람이라는 것을 알았지 만 누가 게임을 시작했는지 상관하지 않기 때문에 내가하지 않았다는 것을 깨달았습니다. (그리고 알아야 할 경우 첫 번째 사람입니다.), 그래서 애매 모호하지 않으며, 이것은 효과가 있습니다. 감사! –

+0

도와 드릴 수있어서 기쁩니다.] –