通过在其他表上计数的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有一些语法错误,但它们已被修复。 请注意,我假设您的表被称为users
和questions
。 它们可能因您而异。