私のモデルは次のとおりです。
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 を設定する必要があるかもしれませんが、それを行う最善の方法もわかりません。何かご意見は?