お世話になっております。
Railsアプリでの検索についてです。
やりたいこと
配列の値が全て含まれるレコードを取得したい。
SQLでのINがあると思うのですが、それのAND検索というイメージです。
DB
user
- id
- name
tag
- id
user_tags
- user_id
- tag_id
class User < ActiveRecord::Base has_many :tags end class Tag < ActiveRecord::Base end class UserTag < ActiveRecord::Base belongs_to :user belongs_to :tag end
例
実際の使い方としては、以下のようなシチュエーションです。
「タグID 10と20の両方を持っているユーザーを取得したい」
この目的がある時のactive recordの書き方です。
現在以下のようにやろうとしているのですが、期待通りに動きません。
tag_ids = [10,20] users = User.joins(:user_tag) tag_ids.each do |tag| users = users.where(user_tag: {tag_id: tag}) end users.count => 0
発行されるSQLは以下の通りです。
SELECT COUNT(*) FROM `users` INNER JOIN `user_tags` ON `user_tags`.`user_id` = `users`.`id` WHERE `user_tags`.`tag_id` = 10 AND `user_tags`.`tag_id` = 20;
10と20の両方のtag_idを持っているuserを取得する方法をご教授ください。
このtag_idの配列の数は可変です。
[10,20]や[10,20,30]など、最大で13個の数値が入ります。
ちなみに生のSQLでの方法も探りましたが、こちらもうまくいきませんでした。
実際の開発環境のDB構造よりも簡略化しているため、不備があるかもしれません。何なりとお申し付けください。
回答2件
あなたの回答
tips
プレビュー