ruby-on-rails – 查找具有重复名称的所有用户

我有一个拥有first_name和last_name字段的用户,我需要做一个 ruby,根据名字和姓氏查找所有拥有重复帐户的用户.例如,我想有一个搜索,将搜索所有其他用户,并找到是否有相同的名称和电子邮件.我在想这样一个嵌套循环
User.all.each do |user|
 //maybe another loop to search through all the users and maybe if a match occurs put that user in an array
end

有没有更好的办法

解决方法

您可以通过查找重复数据的位置来缩小搜索范围.例如,假设您想要查找使用不止一次的名字和电子邮件的每个组合.
User.find(:all,:group => [:first,:email],:having => "count(*) > 1" )

这将返回一个包含每个重复记录之一的数组.从那里,说一个返回的用户有“Fred”和“fred@example.com”,那么您可以搜索只有具有这些值的用户才能查找所有受影响的用户.

该查找的返回将类似于以下内容.请注意,阵列仅包含来自每组重复用户的单个记录.

[#<User id: 3,first: "foo",last: "barney",email: "foo@example.com",created_at: "2010-12-30 17:14:43",updated_at: "2010-12-30 17:14:43">,#<User id: 5,first: "foo1",last: "baasdasdr",email: "abc@example.com",created_at: "2010-12-30 17:20:49",updated_at: "2010-12-30 17:20:49">]

例如,该数组中的第一个元素显示一个具有“foo”和“foo@example.com”的用户.其余的可以根据需要从数据库中拉出来.

> User.find(:all,:conditions => {:email => "foo@example.com",:first => "foo"})
 => [#<User id: 1,last: "bar",created_at: "2010-12-30 17:14:28",updated_at: "2010-12-30 17:14:28">,#<User id: 3,updated_at: "2010-12-30 17:14:43">]

而且,您似乎希望为您的代码添加一些更好的验证,以防将来重复.

编辑:

如果您需要使用find_by_sql的大锤子,因为Rails 2.2及更早版本不支持:使用find可以使用以下内容,并提供与上述相同的数组.

User.find_by_sql("select * from users group by first,email having count(*) > 1")

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...