2012-01-22 4 views
0

Je suis en train de concevoir un schéma pour une solution de messagerie afin que je puisse accéder aux messages entrants et envoyés sur l'objet Utilisateur à l'aide de DataMapper. Les associations "inbox" et "envoyé" ne font pas ce qui est prévu. Qu'est-ce que je fais mal? Merci d'avance!Association DataMapper

Je suis ce qui suit à ce jour (après avoir lu un peu et copier l'exemple d'amis sur le site de DM) -

class User 
    include DataMapper::Resource 
    property :id, Serial 
    property :name, String, :required=>true 
    property :email, String, :required=>true, :unique=>true 
    property :password, String, :required=>true 

    has n, :messages, :child_key=>[:source_id, :target_id] 
    has n, :inbox, 'Message', :through=>:messages, :via=>:target 
    has n, :sent, 'Message', :through=>:messages, :via=>:source 
end 

class Message 
    include DataMapper::Resource 
    property :id, Serial 
    property :subject, String, :required=>true 
    property :body, String 

    belongs_to :source, 'User', :key=>true 
    belongs_to :target, 'User', :key=>true 
end 

Répondre

1

Je réponds à ma propre question - espérons qu'il aide quelqu'un

le changement suivant corrige le problème que j'ai eu -

class User 
    ... 

    has n, :inbox, 'Message', :child_key=>[:target_id] 
    has n, :sent, 'Message', :child_key=>[:source_id] 
end 

Tout le reste, reste le même ...