Rails,用户模型上的自引用关联来定义朋友/关注者

时间:2011-12-13 23:14:18

标签: ruby-on-rails ruby-on-rails-3

我正在努力建立一个友谊协会。我发现并一直关注教程:

http://railscasts.com/episodes/163-self-referential-association

本教程的问题是没有状态概念(接受,待定,忽略)

关于如何创建这种类型的关系但有状态的任何想法,所以当你的朋友请求它时,等待直到正确的用户接受或忽略?

由于

1 个答案:

答案 0 :(得分:0)

假设友谊中的两个参与者也可能有其他友谊,那么你需要在某个地方存储这种特殊友谊的状态。这表明您需要一个可以通过has_and_belongs_to_many获得的连接模型。然后您的状态可以存储在连接表中(在这种情况下是友谊)

class Person< ActiveRecord::Base
  has_many :friendships
  has_many :friends, :class_name => "Person", :through => :friendships
end

class Friendship < ActiveRecord::Base
  belongs_to :friend1, :class_name => "Person" 
  belongs_to :friend2, :class_name => "Person"
end

但正如你可能从kludgy friend1和friend2那里注意到的那样,你即将遇到的问题是你可能希望友谊作为一种非直接的关系。

这是一个太详细的话题,但这里有一个地方: a promising looking article that I haven't actually used

然后最后请注意,虽然友谊是双向的,但友情请求不是 - 在请求的情况下,您需要知道谁发出了它以及谁收到它。所以我猜你会想要一个双向的友谊关系和一个指向的friend_request关系。当请求被批准时,删除关系并添加双向友谊。