2

「私」をブロックしていないユーザーからいくつかの投稿を取得しようとしています。以下のSeモデル:

User
  id
  username
  ....

Post
  id
  user_id
  content
  ...

Blockings
  blocker_id
  blocked_id

私をブロックしていないすべてのユーザーから投稿を取得する必要があります。

私はすべての投稿を取得します:

@posts Post.all

しかし、どうすればこれを結合できますか。

擬似

SELECT * FROM posts WHERE "posts.user_id isn't blocking me"

current_user現在ログインしているユーザー「me」を返すというヘルパーがいます。

4

2 に答える 2

1

SQLでそれを行う方法は次のとおりです。

select *
  from post
  where user_id not in 
    (select blocker_id 
    from blockings
    where blocked_id = 1);

数値IDを変数に置き換えるだけです。

SQLフィドル

于 2012-10-31T11:15:54.987 に答える
0

あなたのPostクラスとこのようなスコープで:

scope :not_blocked_from, lambda{|user| where("blocked_id <> ?", user.id)}

そして、あなたは以下のようにあなたが望むそれらの投稿をフェッチすることができます:

Post.not_blocked_from(me)

動作します。

于 2012-10-31T11:05:43.990 に答える