第一篇 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 提供的说明解决了这个问题,除了将 score 方法放在我的 Post 模型中而不是 Vote 模型中
def score
self.votes.upvotes.count - self.votes.downvotes.count
end
否则,我的帖子现在是根据 Upvote 排序的!感谢大家!