2011-08-12 51 views
0

我正在Rails 3中開發API。 最近我看到一些用戶帳號是雙倍的。我不知道有多少,所以我需要一種方法來找出哪些帳戶是雙重的。Rails/Ruby。搜索雙電子郵件

有沒有一種方法,在紅寶石中,搜索整個數據庫並獲取具有相同電子郵件地址(因此雙)的用戶帳戶?

感謝您的所有意見!

回答

1

只要打開Rails的控制檯(rails c),然後鍵入像這樣:

Account.group(:email).having('count_all > 1').count 

這將返回一個哈希的電子郵件地址是關鍵,它發生的次數值。結果看起來是這樣的:

=> #<OrderedHash {"[email protected]"=>2, "[email protected]"=>2}> 

然後,我想你可以把這些電子郵件地址,並實際獲得帳戶:

Account.where(:email => "[email protected]") 

要輸出他們都在控制檯,你可以結合兩個那些像這樣的:

email_hash = Account.group(:email).having('count_all > 1').count 
email_hash.each do |email, count| 
    Account.where(:email => email).each do |account| 
    p account 
    end 
end 
+0

運行在控制檯中的第一行,當我得到這個錯誤:的ActiveRecord :: StatementInvalid:PGError:ERROR:列「count_all」不存在 LINE 1:...電子郵件AS電子郵件FROM「users」GROUP BY電子郵件HAVING count_all –

+0

您使用的是哪個版本的Rails?另外,它看起來像你正在使用Postgres。是對的嗎?你可以嘗試先輸入:'ActiveRecord :: Base.logger = Logger.new(STDOUT)'這會告訴你它爲你生成的SQL。 – dontangg

0

我想,如果你嘗試使用(例如):

UserAccount.all.group_by(&:email_address).each do |email, record| 
#you will get a set of records grouped by email address 
end 

這將幫助你(你沒寫你的模型的詳細說明,但如果認爲你會得到線索)