Mysql Rails:Order-find对象具有has\u和\u-belies\u-to\u-many关系

Mysql Rails:Order-find对象具有has\u和\u-belies\u-to\u-many关系,mysql,ruby-on-rails,Mysql,Ruby On Rails,我正在尝试创建一个图书列表,并按其拥有的用户数进行排序: Class User has_many_belongs_to_many :books end Class Book has_many_belongs_to_many :users end 不幸的是,这会引发一个错误,告诉我没有用户列: 如果我删除count,我仍然会得到一个错误,说它找不到用户。知道如何获取这些数据吗?当您调用users.count DESC时,rails将尝试查找users.count列。您需要删除计数并改为

我正在尝试创建一个图书列表,并按其拥有的用户数进行排序:

Class User

has_many_belongs_to_many :books

end

Class Book

has_many_belongs_to_many :users

end
不幸的是,这会引发一个错误,告诉我没有用户列:

如果我删除count,我仍然会得到一个错误,说它找不到用户。知道如何获取这些数据吗?

当您调用users.count DESC时,rails将尝试查找users.count列。您需要删除计数并改为引用user.id

尝试更改:order=>COUNTusers.id DESC的:order=>users.count DESC

我现在不能测试它,但我相信它应该能解决问题

编辑-尝试查询Rails 3的新方法。应该是如下所示:

<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不再抛出错误,但此解决方案也无法正常工作。它只返回一项,而不是返回五项。这一个也不一定是用户数量最多的项目。我会继续探索计数函数,现在我知道了,如果我找到答案,我会更新。我在Rails 3上,虽然我没有听说过新的方法。一个很好的railscast:像往常一样,很棒的railscast。代码现在工作得很好。它的内容是:Book.where'title LIKE',%%{params[:autocomplete]}%。包括:users.orderusers.id desc.limit5
<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>
Book.where('title LIKE ?', "%#{params[:autocomplete]}%").includes(:users).order(COUNT(users.id) DESC").limit(5)