从另一个表中获取没有记录的记录

时间:2017-08-02 08:27:06

标签: sql ruby-on-rails orm

我想买一些不受用户不喜欢的自行车。因此,如果用户不喜欢自行车,它将永远不再展示自行车。

自行车有很多不喜欢的东西,属于用户。 用户有很多不喜欢和自行车。 不喜欢属于用户和自行车。

这是我在BicyclesController的索引操作中的代码:

.Limit(2)

所以我收到了这个错误:

@bicycles = Bicycle.includes(:dislikes).where.not("dislikes.author_id = #{current_user.id}")

更新

此查询为我提供了用户不喜欢的记录:

PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "dislikes"
LINE 1: ...cles" WHERE "bicycles"."published" = $1 AND (NOT (dislikes.a...
                                                             ^
: SELECT  "bicycles".* FROM "bicycles" WHERE "bicycles"."published" = $1 AND (NOT (dislikes.author_id = 1)) LIMIT $2 OFFSET $3

但现在我想从所有人那里排除这些记录。有没有一种有效的方法来做到这一点?

2 个答案:

答案 0 :(得分:0)

PostgresSQL查询语法:

 @bicycles = Bicycle.includes(:dislikes).where.not(dislikes: {author_id:  current_user.id})

答案 1 :(得分:0)

最后我得到了所需的结果:

user_dislikes = current_user.dislikes.map(&:bicycle_id)
@bicycles = Bicycles.where('id NOT in (?)', user_dislikes)