Rails,当有两个相等的字段时如何查询友谊模型:user_id& friend_id?

时间:2011-12-18 23:29:56

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

我有一个像这样的友谊模型:

Friendship (user_id, friend_id, status)

只有1条记录在用户A和用户B之间建立友谊.user_id是在friend_id上发起的用户。在创建状态为“待定”。当friend_id批准或忽略时,该状态将更新。

给予关系。如何获得用户的所有联系人?查询需要跨user_id和friend_id进行查询,这就是为什么@ user.friendships不起作用的原因。这只会显示创建的朋友。

想法?

1 个答案:

答案 0 :(得分:0)

我构建了一个rails应用程序,需要维护人与人之间关系的谱系。我所做的是为每个关系创建相等和相反的地图,例如[a,b,father],[b,a,son]使用after_createafter_updateafter_destroy触发器。我这样做的原因是我希望在人与人之间进行非常快速的搜索。效果很好。

创建代码如下所示:

def after_create(record)
  if ! record.relative.has_relative(record.person_id)
    new_relationship = Relationship.new(:relative => record.person, 
      :relationship => hantai(record.relative.gender, record.person.gender, record.relationship))
    record.relative.relationships << new_relationship
    record.relative.save
  end
 end

Relationship对象与Friendship对象相同,而record就是此人。