2012-07-15 51 views
0
Class User 

has_many_belongs_to_many :books 

end 

Class Book 

has_many_belongs_to_many :users 

end 

我試圖通過用戶數創造的書,責令名單,他們有:的Rails:訂購發現有has_and_belongs_to_many關係的對象

Book.find(:all,:conditions => ['title LIKE ?', "%#{params[:autocomplete]}%"], 
:limit => 5, :include => :users, :order => "users.count DESC") 

不幸的是,這將引發一個錯誤說服力我說,沒有用戶列:

<pre>Mysql::Error: Unknown column 'users.count' in 'order clause': SELECT `books`.* 
FROM `books` WHERE (title LIKE '%pop%') ORDER BY users DESC LIMIT 5</pre> 

如果我刪除「算,」我仍然得到一個錯誤,指出它MySQL不能找到「用戶」。任何想法如何獲得這些數據?

回答

1

當您撥打users.count DESC時,導軌會嘗試找到列users.count。您需要刪除count並參考user.id

嘗試更改:order => "users.count DESC":order => "COUNT(users.id) DESC"

我現在不能測試,但我相信它應該解決的問題......

編輯 - 嘗試新的方法來查詢(Rails 3中)。應該像下面這樣:

Book.where('title LIKE ?', "%#{params[:autocomplete]}%").includes(:users).order(COUNT(users.id) DESC").limit(5) 
+0

這似乎是朝着正確方向邁出的一步。 Mysql不再拋出一個錯誤,但是這個解決方案也不安靜。它只返回一個,而不是返回五個項目。這也不一定是擁有最多用戶數量的產品。現在我會繼續探索COUNT函數,如果我找到答案,我會更新。 – nullnullnull 2012-07-15 19:27:51

+0

你在Rails 3上嗎?如果是這樣,你可以使用新的方式。我會更新我的答案.. – gabrielhilal 2012-07-15 21:08:04

+0

我在Rails 3上,雖然我沒有聽說過新的方法。 – nullnullnull 2012-07-15 22:14:59