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

コンソールで 1 人のフォロワーの数を取得します。

私はほとんどそこにいるような気がします。

フォロワーと follow_users を「取得済み」カウントで並べ替えるにはどうすればよいですか? (最初は有望に見えたが、必要なものではないかもしれないという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 にいくつかの構文エラーがありましたが、修正されました。usersあなたのテーブルがand と呼ばれていると仮定していることに注意してくださいquestions。それらはあなたにとって異なる場合があります。

于 2013-04-08T03:06:38.143 に答える