2010-10-20 50 views
0

這裏是我創建了一個數組:爲什麼uniq!方法的工作,但排序!不在這個數組在軌?

@companies_with_email = Company.contact_emails_date_sent_gt(@monday). 
           contact_emails_date_sent_lt(@friday). 
           find(:all, :select => "distinct companies.* ") || [] 

@companies_with_call = Company.contact_calls_date_sent_gt(@monday). 
           contact_calls_date_sent_lt(@friday). 
           find(:all, :select => "distinct companies.* ") || [] 

@companies_with_activity = @companies_with_email + @companies_with_call 
@companies_with_activity.uniq! 

不過,我希望它是按字母順序排列的,所以我試圖添加的.sort!我得到一個錯誤,說< =>方法不存在。

undefined method `<=>' for #<Company:0x9d506a8> 
+0

要回答在標題的問題:'uniq'和'sort'需要不同的距離的方法(「鴨子類型」)對象在集合/枚舉中。 'uniq'需要'hash'和'eql?','sort'需要'<=>'。 ActiveRecord :: Base提供'eql?'和'hash'(所以'uniq'作品),但它不提供'<=>'(所以'排序'不起作用)。 – 2010-10-20 03:05:17

回答

4

排序公司不「只是工作」。這個錯誤信息意味着沒有辦法僅僅比較兩個公司的比較運算符<=>,因爲它不知道你會比較什麼:數據庫中的ID,名字,Ruby內存中的ID,等

你可以自己定義排序行爲,但:

@companies_with_activity.sort! { |a,b| a.name <=> b.name } 
+0

奇妙的是, – Angela 2010-10-20 03:38:06

+1

'@ companies_with_activity.sort_by(&:name)'是一種更習慣的方法(儘管注意它不會修改原始數組) – 2011-03-09 20:41:34

相關問題