1

我正在向 Hartl 教程中的 twitter 应用程序添加测验功能,并拥有以下模型:

用户与教程几乎相同:

class User < ActiveRecord::Base

  has_many :followed_users, through: :relationships, source: :followed

  has_many :takens, dependent: :destroy
  has_many :questions, through: :takens
end

采用的是用户 id 的问题 id 表:

class Taken < ActiveRecord::Base
  belongs_to :user
  belongs_to :question

end

没有什么有趣的问题:

class Question < ActiveRecord::Base
  attr_accessible :category, :correct, :option1, :option2, :option3, :qn
end

我希望能够按照他们进行的测试次数的顺序显示 follow_users 和 follower。在控制台中,这可以通过:

User.find_by_id(1).question_ids.count

然后我可以做类似的事情:

User.find_by_id(1).followers.first.question_ids.count

在控制台中获取单个追随者的计数。

我觉得我快到了。

如何通过“获取”计数对关注者和关注用户进行排序?(我也在查看 cache_count,起初看起来很有希望,但可能不是我需要的......)

4

1 回答 1

4

Ruby on Rails 不提供面向对象的机制来执行此操作。您必须自己编写 SQL。在您的情况下,我会说以下行应该有效:

User.find_by_sql("SELECT users.*, COUNT(questions.id)
 AS c FROM users, questions WHERE questions.user_id = users.id
 GROUP BY users.id ORDER BY c DESC")

我面前没有实际的表,所以我不能确定这是实际有效的 SQL,但希望它应该可以工作。

编辑:我的 SQL 存在一些语法错误,但已修复。请注意,我假设您的表被称为usersand questions。它们可能对您有所不同。

于 2013-04-08T03:06:38.143 回答