複数テーブルがからむリクエストをはじめてかくのでどうかいたらいいかわかりません
users と user_status というテーブルがあって
user_status のカラムは user_id と status_id のペアがはいってます
class CreateUserStatuses < ActiveRecord::Migration def change create_table :user_statuses do |t| t.references :user, foreign_key: true, null: false t.integer :status_id, null: false t.timestamps null: false end end end
status_id の配列を検索キーにして
user_status にそのペアが存在するユーザ ID のユーザだけ検索するにはどうすればいいでしょうか
正確な文法ではないのですが
User.where(|user| UserStatus.where(user_id: user.id, p_status_id: p_status_list) != nil)
みたいな条件で検索したいです
つまり検索中のユーザのIDを他のテーブル検索の条件につかいたいんですがこういうことってできるのでしょうか
サンプル:
[users table]
1
2
3
[user_statuses table]
user_id status_id
1 1
1 2
1 3
2 2
2 3
2 4
3 3
3 4
3 5
(ユーザ1 はステータス 1,2,3
ユーザ2 はステータス 2,3,4
ユーザ3 はステータス 3,4,5
をもってる)
で status_list = [2,3] を検索キーとしてあたえたときにこの全部をもっているユーザを探して
この場合 ユーザ1 とユーザ2 (ユーザ3 はステータス 2 をもってないので除外)
を id ではなく [<User1> <User2>] のような users のリレーションとして出力したいです
(このあと Users に対しても where でしぼりこみをかけるため)
users.where("id IN (SELECT user_id FROM user_statuses WHERE status_id IN #{status_list})")
のようにかけば動きそうな気がするのですが user_statuses をインデックスのついてない status_id で検索してることになって遅くならなりそうなので、user_statuses の検索は foreign key? (意味がよくわかってないですが)のついてるuser_id をキーに検索をかけたいです
Rails の ActiveRecord メソッドとSQLがまざってしまってますがすいません…
回答1件
あなたの回答
tips
プレビュー