アクティブレコードを使用して、ネストされたモデルに基づいてデータを返す方法を見つけようとしています。
私の関係は以下のように設定されています:
- ユーザー-たくさんの本を持っています
- 本-多くのユーザーがいます
- UserBook-ユーザーに属し、本に属します
私は次のような本を通してユーザーにアクセスできます:
book.users.first
book.users.second
等
特定のユーザーがいないすべての本を選択したいと思います。
このようなクエリを生成しました。「near」メソッドはGeocodergemによって提供されることに注意してください。
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