0

habtm ユーザーと habtm タグを投稿しています。「猫」と「かわいい」の両方のタグを持つ投稿を見つける必要があるため、次を使用しようとしています。

current_user.posts.includes(:tags).where("tags.title = ? AND tags.title = ?", "cats", "cute")

AND の代わりに OR を使用した同じクエリでも問題なく動作しますが、空の配列が返されます。そしてもう1つの質問は、それは実際に正しい方法ですか? 私の心配は、実際の MySQL リクエストが非常に大きく重いものになることです。より良いオプションはありますか?

よろしくお願いします。

編集: 上記のコード行が作成する SQL クエリは次のとおりです。

SQL (0.9ms)  SELECT `posts`.`id` AS t0_r0, `posts`.`provided_id` AS t0_r1, `posts`.`uid` AS t0_r2, `posts`.`content` AS t0_r3, `posts`.`image` AS t0_r4, `posts`.`small_image` AS t0_r5, `posts`.`provided_created_at` AS t0_r6, `posts`.`latitude` AS t0_r7, `posts`.`longitude` AS t0_r8, `posts`.`created_at` AS t0_r9, `posts`.`updated_at` AS t0_r10, `posts`.`provider` AS t0_r11, `tags`.`id` AS t1_r0, `tags`.`title` AS t1_r1, `tags`.`created_at` AS t1_r2, `tags`.`updated_at` AS t1_r3 FROM `posts` LEFT OUTER JOIN `posts_tags` ON `posts_tags`.`post_id` = `posts`.`id` LEFT OUTER JOIN `tags` ON `tags`.`id` = `posts_tags`.`tag_id` INNER JOIN `posts_users` ON `posts`.`id` = `posts_users`.`post_id` WHERE `posts_users`.`user_id` = 2 AND (tags.title = 'cats' AND tags.title = 'cute')
4

1 に答える 1