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

标签 ruby-on-rails ruby activerecord

我的用户有 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”,那么您可以仅搜索具有这些值的用户以找到所有受影响的用户。

find 的返回结果如下所示。请注意,该数组仅包含每组重复用户的一条记录。

[#<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, first: "foo", last: "bar", email: "foo@example.com", created_at: "2010-12-30 17:14:28", updated_at: "2010-12-30 17:14:28">, 
     #<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">]

而且您似乎还想为您的代码添加一些更好的验证以防止将来出现重复。

编辑:

如果需要使用find_by_sql这个大锤,因为Rails 2.2及更早版本不支持:having with find,以下应该有效,并为您提供与我上面描述的相同的数组。

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

关于ruby-on-rails - 查找所有具有重复名称的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4564631/

相关文章:

ruby-on-rails - 为什么 Ruby 只运行一些测试而不运行其他测试?

ruby-on-rails - Ruby - "can' t 将符号转换为整数“当尝试访问数组中的数据时

ruby-on-rails - 无法为 Ruby on Rails 6 创建弹性 beanstalk 环境(rvm、rbenv、.ruby 版本问题)

ruby-on-rails - 打开 ("url or file name")并要求 'open-uri' 无法在 Rails 上运行 ruby

ruby-on-rails - Rails 5 Eager load 然后 find_by

ruby-on-rails - Model.reset_column_information 不会在 Rails 迁移中重新加载列

ruby-on-rails - URI::InvalidURIError: 错误的 URI(不是 URI?)测试 Rails Controller

ruby-on-rails - 为什么 application.rb 在 Rails 4.1 和 4.0 之间不同

ruby-on-rails-3 - 如何使用Arel制作一个不会影响Rails 3中查询的ActiveRecord范围?

mysql - codeigniter查询问题