从非阻止用户获取帖子

时间:2012-10-31 10:05:22

标签: sql ruby-on-rails postgresql activerecord

我正在尝试从未阻止“我”的用户那里获取一些帖子。硒型号如下:

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的帮助程序,它返回当前登录用户“我”。

2 个答案:

答案 0 :(得分:1)

使用SQL执行此操作的方法是:

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

只需将数字id替换为变量。

SQL Fiddle

答案 1 :(得分:0)

在你的Post类和这样的范围内:

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

您可以按以下方式获取所需的帖子:

Post.not_blocked_from(me)

会工作。