假设我有一个模型 Account
,其中包含 :email、:name 等
列。电子邮件不是唯一的。我想要的是添加一个 chainable scope
来选择具有不同电子邮件但具有所有其他字段的行。 “可链接”是指我可以这样做:Account.uniq_by_email.where(bla bla)
。
我尝试过的:
使用
选择
:def self.uniq_by_email select('distinct email') end
对我不起作用,因为它只选择电子邮件字段。
与
组
def self.uniq_by_email group(:email) end
这几乎是我想要的:我可以链接它并选择所有字段。但是
count
方法有一个奇怪的地方:正如您已经猜到的那样,它返回电子邮件计数的散列。但我希望它返回“简单的”ActiveRecord_Relation
,其中count
仅返回计数而不是哈希。这有可能实现吗?
最佳答案
我的基本想法是只选择每组电子邮件中的第一个条目。 简单点,我创建了一个这样的范围,而不是使用类方法:
scope :uniq_by_email, -> { joins("JOIN (
SELECT MIN(id) as min_id
FROM accounts
GROUP BY email
) AS temp
ON temp.min_id = id") }
从这里你可以像你描述的那样做一些像链式的事情:
Account.uniq_by_email.where(bla bla)
关于mysql - Rails 4 Active Record uniq 通过一列查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33739319/