通过在其他表上计数的rails命令

我正在从Hartl教程中为twitter应用添加测验function,并拥有以下模型:

用户与教程几乎相同:

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和followers。 在控制台中,这可以通过:

 User.find_by_id(1).question_ids.count 

然后我可以这样做:

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

在控制台中获取单个关注者的计数。

我觉得我差不多了。

如何通过’takens’计数对关注者和follow_users进行排序? (我也在看cache_count,起初看起来很有希望,但可能不是我需要的……)

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有一些语法错误,但它们已被修复。 请注意,我假设您的表被称为usersquestions 。 它们可能因您而异。