は、私が今持っている:入れ子にされたhas_manyを通して検索するには?ここ
class Pokemon < ActiveRecord::Base
has_many :pokemon_moves, dependent: :destroy
has_many :moves, through: :pokemon_moves
end
class PokemonMove < ActiveRecord::Base
belongs_to :pokemon
belongs_to :move
end
class Move < ActiveRecord::Base
belongs_to :type
end
そして他の多くの、ない重要。 私はちょうど移動という名前の「ポンド」と私が試した他の移動「メガパンチ」
を持っている可能性がポケモンを検索したいと思います:
Pokemon.joins(:moves).where(moves: {name: 'pound'}).where(moves: {name: 'mega-punch'})
しかし、誰の結果を。翻訳されたSQLは:
SELECT "pokemons".* FROM "pokemons" INNER JOIN "pokemon_moves" ON "pokemon_moves"."pokemon_id" = "pokemons"."id" INNER JOIN "moves" ON "moves"."id" = "pokemon_moves"."move_id" WHERE "moves"."name" = $1 AND "moves"."name" = $2 [["name", "pound"], ["name", "mega-punch"]]
1つの移動だけを検索すると、うまく動作しますが、2つの移動で取得できません。
私は多くのことを試しましたが、すべて悪い結果に終わります。 もちろん、ポケモンにはその動きがあります。私がすれば、これら2つの動きを取り出すことができます。Pokemon.find_by_name('golurk').moves
ありがとうございます!
UPDATE 1: が、私はそれは単に&
演算子を使用して働かせた:
Pokemon.joins(:moves).where(moves: {name: 'pound'}) & Pokemon.joins(:moves).where(moves: {name: 'mega-punch'})
しかし、それは本当に効率的ではない、と私たちはより良い方法を見つけることができる確信しています。
あなたのコードはORリクエストを行います。私は「ポンド」や「メガパンチ」を持っているポケモンを手に入れたくない、「ポンド」と「メガパンチ」を持ったポケモンを欲しい。ご回答有難うございます ! –