我想得到用户不喜欢的自行车。所以如果用户不喜欢一辆自行车,它就永远不会再显示那辆自行车。
自行车有很多不喜欢的,属于用户。用户有很多不喜欢和自行车。不喜欢属于用户和自行车。
这是我在 BicyclesController 的索引操作中的代码:
@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
更新
此查询为我提供了用户不喜欢的记录:
@bicycles = Bicycle.includes(:dislikes).where(dislikes: {author_id: current_user.id})
但现在我想从所有记录中排除这些记录。有没有一种有效的方法来做到这一点?
最后我得到了需要的结果:
user_dislikes = current_user.dislikes.map(&:bicycle_id)
@bicycles = Bicycles.where('id NOT in (?)', user_dislikes)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句