mysql - rails : Order found objects with a has_and_belongs_to_many relationship

标签 mysql ruby-on-rails

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/

相关文章:

ruby-on-rails - f.error_messages仅在基础中显示第一条错误消息

php - 快速检查或添加到数据库

php - 每月租金发票和付款数据库架构

MySQL,反转 SELECT GROUP BY

javascript - 键入时进行验证、预填充和潜在阻止

ruby-on-rails - 意外结束语法错误

mysql - 存储过程和 COUNT IF 语句的问题

mysql - Grailsquartz 插件在从 mysql 5.5 升级到 mysql 5.6 时中断

ruby-on-rails - 使用 RSpec 和不同的路由名称测试 Ruby-on-Rails Controller

javascript - Google map JavaScript API 和 JavaScript