2010-05-12 29 views
2

我想知道如何在PostController#索引中对帖子进行排序,以通过单独的表中的列总数进行显示。这是我如何设置的。如何从一张单独的表中总结我的输入?

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

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

我的用户可以投票或上下某一职位。我知道有可能有更好的方式去做我目前正在做的事情,但是根据我目前的情况寻找解决办法。当用户投票发布帖子时,值1会通过隐藏字段传递给投票表。当用户投票发表帖子时,值-1被传递给同一列(名称投票)。

我想知道如何以特定帖子的投票栏(在投票表中)的顺序显示我的帖子。

另一种方式说,如果某个职位有5净投总和,我想,要出现上述后与4

网投票和我假设我需要以某种方式影响PostController#索引操作。但不知道该怎么做。

回答

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 
+0

一如既往,感谢。 – bgadoci 2010-05-13 15:26:46

+0

只需快速跟进此问题即可。我将帖子#索引的显示移到了帖子控制器之外。本质上,我正在卷起问题下的帖子。我在问题展示中成功呈现_post文件,但现在没有正确排序。任何明显的我失踪? – bgadoci 2010-05-15 04:07:17

+0

发布一个链接到您的代码,可能很容易回答。 – 2010-05-15 04:47:09

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 
相关问题