0

次のテーブルがあります

Users
  - id
  - name

User_Skills
  - id
  - user_id
  - skill_id

Skills
  - id
  - name

正確なスキルセットを持つすべてのユーザーを取得したい

User.join(:user_skills).where('user_skills.skill_id IN (1,2,3)')

これにより、1 または 2 または 3 のいずれかのスキルを持つすべてのユーザーが返されます。

スキル 1 AND 2 AND 3 を持つユーザーのみを取得するにはどうすればよいですか?

これは動作しません

 User.join(:user_skills).where('user_skills.skill_id = 1 and user_skills.skill_id = 2 and user_skills.skill_id = 3')
4

1 に答える 1

1

これを試して:

class User < ActiveRecord::Base
  def with_skills(*ids)
    ids.flatten!
    join(:user_skills).where(user_skills: {skill_id: ids}).group(users: id).having('COUNT(DISTINCT user_skills.id) = ?', ids.length)
  end
end
于 2013-09-19T09:59:28.917 に答える