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(不是 AND!)回复用户。

4

1 回答 1

0

我知道如何做到这一点的最简单方法是(Micropost.from_users_followed_by(self) + Micropost.in_reply_to(self)).uniq

您还可以使用支持 OR 子句的 Squeel gem ( https://github.com/ernie/squeel/ ) - 但我不确定 Squeel 是否允许您在现有范围上使用 OR 运算符;它可能是也可能不是解决您的麻烦的有效方法。

于 2013-03-12T21:40:10.987 回答