如何使用活动记录加入这些表?

时间:2013-09-19 09:48:23

标签: ruby-on-rails-3 activerecord join

我有以下表格

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 OR 2 OR 3技能的用户。

如何获得技能1和2和3的用户?

这不起作用

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

1 个答案:

答案 0 :(得分: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