2011-03-18 55 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