I was struggling with the same thing, and in the end came up with 
something like this:


class User
  include DataMapper::Resource
  has n, user_users

  def friends
    @friends ||= self.user_users.map {|ss| ss.friend}
  end

  def friended_by
    @friended_by ||= UserUser.all(:friend_id => self.id).map {|ss| ss.user}
  end
end

class UserUser
  include DataMapper::Resource

  property :user_id, Integer, :key => true
  property :friend_id, Integer, :key => true
 
  belongs_to :user, :class_name => "User", :child_key => [:user_id]
  belongs_to :friend, :class_name => "User", :child_key => [:friend_id]
end


Most probably sub-optimal, but I'm not looking for optimal solutions in 
the project that I'm working on. ;-)

I'm curious though if there's a more succinct way to do this. Because 
afaics at the moment you can't do this sort of thing nicely in dm yet. 
(With "nice" I mean it shouldn't be necessary to explicitly define class 
UserUser and methods +friends+ and +friended_by+ in this example)



Lawrence

> Greetings!
>
> I am pretty new to DataMapper, I can't figure out how to do the
> following.
>
> I have a User model, a user can have friends, which themselves are
> users. How can I define this many-to-many relationship on the same
> model?
>
> Thanks!
> -- Sinan
> >
>
>   


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"DataMapper" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/datamapper?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to