1

アクティブレコードを使用して、ネストされたモデルに基づいてデータを返す方法を見つけようとしています。

私の関係は以下のように設定されています:

  • ユーザー-たくさんの本を持っています
  • 本-多くのユーザーがいます
  • 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
4

0 に答える 0