1

我将如何使用MetaWhere(在 Rails 3 中)编写此查询?

SELECT "users".* FROM "users" 
INNER JOIN "friendships" friends 
   ON "users"."id" = friends."friend_id" 
INNER JOIN "friendships" inverse_friends 
   ON "users"."id" = inverse_friends."user_id" 
WHERE friends."user_id" = 4 
   AND friends."status" = 't' 
   AND inverse_friends."friend_id" = 4 
   AND inverse_friends."status" = 't'

我正在尝试在我的User类上添加一个方法,该方法buddies将返回friendsinverse_friends从这个Railscast on self-referential association 中返回。

我会很感激任何帮助!


编辑:我希望能够查询返回的集合,这样我就可以做到:

def is_a_buddy_of?(user)
  not self.buddies.where(:friend_id >> user.id).empty?
end

解决方案:没关系最后一次编辑,我只是​​将我的is_a_buddy_of?(user)方法修改为这个,|在我现有的关联上使用运算符:

def is_a_buddy_of?(user)
  status = false
  self.buddies.map do |buddy|
    status = true if buddy.id == user.id
  end
  status
end
4

1 回答 1

1

为什么不在用户模型中执行以下操作?:

def buddies
  inverse_friends | friends
end

|是联合运算符。

于 2011-03-18T02:37:27.753 回答