加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails – 活动记录:查找所有具有与某些属性关

发布时间:2020-12-17 01:55:34 所属栏目:百科 来源:网络整理
导读:用户具有许多身份. class User ActiveRecord::Base has_many :identitiesendclass Identity ActiveRecord::Base belongs_to :userend 标识具有已确认的:布尔列.我想查询只有一个身份的所有用户.此身份也必须证实为假. 我试过这个 User.joins(:identities).g
用户具有许多身份.

class User < ActiveRecord::Base
    has_many :identities
end

class Identity < ActiveRecord::Base
    belongs_to :user
end

标识具有已确认的:布尔列.我想查询只有一个身份的所有用户.此身份也必须证实为假.

我试过这个

User.joins(:identities).group("users.id").having( 'count(user_id) = 1').where(identities: { confirmed: false })

但是这会返回一个身份已确认的用户:false但如果确认为true,他们也可以拥有其他身份.我只希望确认只有一个身份的用户:false,并且没有已确认属性为true的其他身份.

我也试过这个,但显然它很慢,而且我正在寻找合适的SQL来在一个查询中执行此操作.

def self.new_users
    users = User.joins(:identities).where(identities: { confirmed: false })
    users.select { |user| user.identities.count == 1 }
  end

如果已经回答了这个问题但是我找不到相似的帖子,请提前道歉.

解决方法

def self.new_users
    joins(:identities).group("identities.user_id").having("count(identities.user_id) = 1").where(identities: {confirmed: false}).uniq
  end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读