最初の StackOverFlow 投稿ですので、ご容赦ください :)
したがって、投票モデルとのポリモーフィックな関連付けを持つ投稿モデルがあります。
私の主な問題は、各投稿を最高の投票数で並べることです。Upvote システムを実装しようとしています。質問:投票数の多い投稿を注文するにはどうすればよいですか? (@合計)
ビュー (@upcount、@downcount、@total) にコードがあり、コントローラーにある可能性があるようですが、それを行う方法がわかりません。
理想的には、コミュニティアクションで次のようなことをしたいと思います: Post.order("@total") しかし、明らかにそれはうまくいきません。
投稿モデル
class Post < ActiveRecord::Base
belongs_to :user
has_many :votes, :as => :votable
投票スキーマ:
t.integer "upvote"
t.integer "downvote"
t.string "votable_type"
t.integer "votable_id"
t.integer "user_id"
ポストコントローラー:
def community
@post = @votable = Post.all
end
そして、マイ ビュー ページでは (ここがややこしいところです):
<% @post.each do |post| %>
<div class="eachpostrate">
<% if signed_in? then %>
<%= form_for [post, Vote.new] do |f| %>
<%= f.hidden_field :downvote, :value => "0" %>
<%= f.hidden_field :upvote, :value => "1" %>
<%= f.submit "8", :class => "upvotethumbup" %>
<% end %>
<% if post.votes.empty? then %>
<span class="upvotecount">
<p> 0 </p>
</span>
<% else %>
<% @upcount = [] %>
<% @downcount = [] %>
<span class="upvotecount">
<p>
<% post.votes.each do |vote| %>
<% @upcount << vote.upvote %>
<% @downcount << vote.downvote %>
<% end %>
<% @total = @upcount.sum - @downcount.sum %>
<%= @total %>
</p>
</span>
<% end %>
投票モデルの代わりにポストモデルにスコアメソッドを配置することを除いて、nilbusが提供する指示を使用してこれを解決しました
def score
self.votes.upvotes.count - self.votes.downvotes.count
end
それ以外の場合、投稿は Upvote に従って並べ替えられます。みんな、ありがとう!