現在2ユーザーに分けたアプリを作成中です。
ログインhostがuser一覧を取得する際に登録しているskillsが全く被らないuserのみ一覧で取得したいと考えています。
ruby
1# User 2 has_many :user_skills 3 has_many :skills, through: :user_skills 4 5# UserSkill 6 belongs_to :user 7 belongs_to :skill 8 9# Host 10 has_many :host_skills 11 has_many :skills, through: :host_skills 12 13# HostSKill 14 belongs_to :host 15 belongs_to :skill 16 17# SKill 18 has_many :user_skills 19 has_many :users, through: :user_skills 20 has_many :host_skills 21 has_many :hosts, through: :host_skills
恥ずかしながら私が書いてみたのは以下のような感じです
ruby
1host_skill_ids = [] 2current_api_host.host_skills.map {|skill| host_skill_ids.push(skill.skill_id)} 3 4User.left_joins(:user_skills).includes(:user_skills).merge(UserSkill.where.not(skill_id: host_skill_ids))
しかしこれだと
検索されるべきではないuserがひっかかってしまいます
ruby
1[1m[36mUser Load (1.9ms)[0m [1m[34mSELECT `users`.* FROM `users` LEFT OUTER JOIN `user_skills` ON `user_skills`.`user_id` = `users`.`id` WHERE `user_skills`.`skill_id` NOT IN (1, 2, 3...) ORDER BY RAND()[0m 2 3[1m[36mUserSkill Load (1.0ms)[0m [1m[34mSELECT `user_skills`.* FROM `user_skills` WHERE `user_skills`.`user_id` IN (31, 17, 21, 13)[0m
ご教授よろしくお願い致します。

あなたの回答
tips
プレビュー