Class User
has_many_belongs_to_many :books
end
Class Book
has_many_belongs_to_many :users
end
我正在尝试创建一个图书列表并按其拥有的用户数量对它们进行排序:
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>
如果我删除“count”,我仍然收到一条错误消息,指出 Mysql 找不到“users”。知道如何获取这些数据吗?
最佳答案
当您调用users.count DESC
时,rails将尝试查找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)
关于mysql - rails : Order found objects with a has_and_belongs_to_many relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11494426/