我正在尝试研究如何使用活动记录基于嵌套模型返回一些数据。
我的关系设置如下:
- 用户 - 有很多书
- 图书 - 有很多用户
- UserBook - 属于用户,属于书
我可以通过这样的书籍访问用户:
book.users.first
book.users.second
等等
我想选择所有没有特定用户的书籍。
我已经生成了这样的查询,请注意,'near' 方法是由 Geocoder gem 提供的。
Book.near(location, distance).joins(:users).where("users.id != #{@current_user.id}")
我相信语法是正确的,没有发生错误,但是,查询仍然返回当前用户的书籍。
问题似乎是,如果 book.users 包含不是当前用户 id 的用户 id 并且还包含当前用户 id,则仍然返回 book。
我可以使用这样的代码获得所需的结果,但我认为有一种方法可以让 ActiveRecord 为我做这件事。
search = Book.near(location, distance).reject do |book|
if book.users.include?(@current_user)
book
end
end