联合两个where子句

时间:2013-03-12 14:44:16

标签: ruby-on-rails

# 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!)以回复用户。

1 个答案:

答案 0 :(得分:0)

我知道如何执行此操作的最简单方法是(Micropost.from_users_followed_by(self) + Micropost.in_reply_to(self)).uniq

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