0

所以我3.2的代碼看起來像這樣的Rails 4.1的升級,具有組麻煩

AssocGenre.includes(:genre).where(attachable_type: Project).count(group: 'genres.name').sort_by{|k,v| -v}.each do 

但現在它給我這個錯誤

undefined method `sort_by' for 193:Fixnum 

,這是什麼在軌4.1,正確的語法?

+0

什麼是你想排序/算? – Anthony 2014-09-19 01:16:57

+0

偶然有193個匹配您的查詢嗎? – 2014-09-19 04:07:37

回答

2

你以前可以調用count但不是當了指定GROUP BY子句。現在您必須使用單獨的group呼叫來指定GROUP BY。從fine manual

計數(列=零,選項= {})

對記錄進行計數。
[...]
如果count使用與group,它返回一個Hash,它的鍵代表集合列,和值是各自的金額:

Person.group(:city).count 
# => { 'Rome' => 5, 'Paris' => 3 } 

你可能想包括簡單的INNER JOIN在SQL中而不是所有額外的東西includes增加所以joins應該更好地工作。

所以,你要這樣說寫信:

AssocGenre.joins(:genre) 
      .where(attachable_type: Project) 
      .group('genres.name') 
      .count 
      .sort_by ... 
+0

工作很好,但我不得不改變包括加入。 – TuxedoTomson 2014-09-24 16:49:28

+0

對不起,我根本沒有注意到'includes'。 – 2014-09-24 17:08:15

1

只是有一個嘗試:

AssocGenre.includes(:genre).where(attachable_type: Project).count(group:'genres.name').**to_a**.sort_by{|k,v| -v}.each..... 
+1

這不起作用,'count'不需要在Rails4中提供GROUP BY子句的':group'選項。 – 2014-09-21 01:54:52