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 に答える