如何通过单独表格中的总和来订购我的参赛作品?

时间:2010-05-12 06:23:31

标签: ruby-on-rails ruby activerecord

我想知道如何在PostController #index中订购帖子,以便在单独的表格中按列总数显示。这是我如何设置它。

class Post < ActiveRecord::Base
  :has_many :votes
end

Class Vote < ActiveRecord::Base
  :belongs_to :post
end

我可以在特定帖子中向上或向下投票。我知道有可能更好的方法来做我目前正在做的事情但是根据我目前的情况寻找解决方案。当用户对帖子进行投票时,值1将通过隐藏字段传递到投票表。当用户对帖子进行投票时,将值-1传递给同一列(名称投票)。

我想知道如何按照特定帖子的投票列(在投票表中)的总和显示我的帖子。

另一种说法是,如果一个特定的帖子的净投票金额为5,我希望它出现在一个净投票金额为4的帖子之上。

我假设我需要以某种方式影响PostController #index动作。但不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

试试这个:

@posts = Post.all(:select => "posts.*, SUM(votes.vote) as vote_total",
         :joins => "LEFT JOIN votes AS votes ON votes.post_id = posts.id",
         :group => "posts.id",
         :order => "vote_total DESC")
@posts.each do |post|
  post.vote_total
end

答案 1 :(得分:0)

您可以使用以下内容。

class Post < ActiveRecord::Base
  :has_many :votes
   named_scope :post_list, 
                :select=>" posts.id, posts.title,posts.description,  votes.total",       
                :joins => :votes, "LEFT JOIN votes ON posts.id = votes.post_id"
                :order => "votes.total DESC"

end