1

私のモデルは次のとおりです。

class Link < ActiveRecord::Base
    has_many :votes
    belongs_to :user
end

class Vote < ActiveRecord::Base
    belongs_to :user
    belongs_to :link
end

class User < ActiveRecord::Base

    has_secure_password

    has_many :links
    has_many :votes
end

システム内のすべてのリンクを一覧表示するページがあります。リンクごとに、すべての投票の現在の合計と、リクエストを行っているユーザーがその特定のリンクに投票したかどうか (投票した場合はその投票の値) の両方を表示したいと考えています。私はこれを最も効率的な方法で行いたいと思っています。

現在、リンクと投票の合計を返すために、リンクコントローラーにこれを持っています:

def index
    @links = Link.all(:joins => :votes, :select => "links.*, sum(votes.value) as votes_total", :group => "links.id")
end

これはうまく機能し、1 回の通話ですべての情報を得ることができます。だから私の質問は、current_user の投票 (存在する場合) を返すために 2 番目のクエリを作成する必要がありますか、それとも最初のクエリに何らかの形で組み込むことができますか?

さらに、データベースにある種の sum_caching を設定する必要があるかもしれませんが、それを行う最善の方法もわかりません。何かご意見は?

4

1 に答える 1