次の 2 つのレール モデルがあります。
class Profile < ActiveRecord::Base
belongs_to :user
has_many :votes, through: :user
default_scope includes(:user)
end
と
class Vote < ActiveRecord::Base
attr_accessible :by, :for
belongs_to :by, class_name: "User"
belongs_to :for, class_name: "User"
validates :by, :for, presence: true
validates_uniqueness_of(:by, scope: :for)
end
関連するユーザー レコードが受け取った「賛成」票の数に基づいてプロファイルを並べ替える「トップ」スコープをプロファイルに作成しようとしています。
投票は、ユーザーがユーザーのために作成します。「by」列は投票したユーザーを示し、「for」列は投票したユーザーを示します。最も多くの票を獲得したユーザーのプロファイルを取得しようとしています。
これは私がこれまでに得たものです:
scope :top,
select("profile.*, count(votes.id) AS votes_count").
joins(:votes, :user).
order("votes_count DESC")
これは、次のエラーでは機能しません。
ActiveRecord::StatementInvalid: PG::Error: エラー: 列 "votes_count" が存在しません
また、「for」列は考慮されません
誰でも私を助けることができますか?