2013-03-12 64 views
0
# models/micropost.rb 

def self.from_users_followed_by(user) 
    followed_user_ids = "SELECT followed_id FROM relationships 
         WHERE follower_id = :user_id" 
    where("user_id IN (#{followed_user_ids}) OR 
     user_id = :user_id", user_id: user.id) 
end 

def self.in_reply_to(user) 
    where("content LIKE :user_login", user_login: '@' + user.login + '%') 
end 


# models/user.rb 

def feed 
    Micropost.from_users_followed_by(self).in_reply_to(self) # AND 
end 

它的工作原理,但我需要从用户微博,其次是用户OR(而不是!)在回复用户。联合两条款

回答

0

我知道该怎么做最简单的方法,这将是(Micropost.from_users_followed_by(self) + Micropost.in_reply_to(self)).uniq

您还可以使用Squeel宝石(https://github.com/ernie/squeel/),它支持OR子句 - 但我不知道,如果Squeel让您使用OR运算符在现有范围内;它可能会或可能不会有效解决您的问题。

+0

它的工作原理,但它返回一个数组,而我想有一个关系(我的错误,我应该描述它)。无论如何,谢谢你的答案。 – Qumeric 2013-03-13 11:29:09

+0

我在使它在本地运行时遇到了一些麻烦,但我偶然听到您可能能够使用“.merge”而不是“+”来获取关系对象。因人而异。 – 2013-03-13 18:23:29