【问题标题】:How do I join these tables with active record?如何将这些表与活动记录连接起来?
【发布时间】:2013-09-19 09:48:23
【问题描述】:

我有以下表格

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 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')

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 如果没有重复的条目,即用户多次拥有相同的技能,这应该可以工作。
    • 我认为这是正确的。只是为了使其更通用,我将添加 Distinct 来计数。
    猜你喜欢
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多