我想买一些不受用户不喜欢的自行车。因此,如果用户不喜欢自行车,它将永远不再展示自行车。
自行车有很多不喜欢的东西,属于用户。 用户有很多不喜欢和自行车。 不喜欢属于用户和自行车。
这是我在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
但现在我想从所有人那里排除这些记录。有没有一种有效的方法来做到这一点?
答案 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)