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

前端之家收集整理的这篇文章主要介绍了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")

猜你在找的Ruby相关文章