2011-03-18 59 views
1

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

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' 

我想我叫buddiesUser类将从此Railscast on self-referential association同时返回friendsinverse_friends添加一个方法。

我很感激任何帮助!


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

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

SOLUTION:没关系,去年的编辑,我只是​​修改了我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 

回答

1

你为什么不只是做您的用户模型如下?:

def buddies 
    inverse_friends | friends 
end 

|是工会操作。

+0

我有时因为简单而讨厌RoR。 :) 谢谢。 – neezer 2011-03-18 02:50:54

+0

Aph,我说得太快......这给了我一个数组,而不是AR :: Relation。我希望能够查询这种方法...(见上面的编辑) – neezer 2011-03-18 02:56:02

+0

哇,我真的不应该编写几乎完成了一瓶相当不错的'Terre del Negroamaro'(好吃!)。我选择坚持与你的工会操作员并相应地调整我的'哥们'方法(见上面最后编辑)。再次感谢。 – neezer 2011-03-18 03:06:54