我在我的示例Rails应用程序中设计了一个简单的投票系统。
我有一个从投票模型中调用方法的控制器
@popular_links = Link.includes(:votes).top
这就是我top
中的link.rb
方法的工作原理:
def self.top
self.all.sort do |a, b|
# Calculate each link's vote counts
a_votes = a.votes.where(:up => true).count -
a.votes.where(:up => false).count
b_votes = b.votes.where(:up => true).count -
b.votes.where(:up => false).count
# Compare it from highest value to lowest value
b_votes <=> a_votes
end.first(6)
end
我不确定我的所作所为是有效的。
或者是否有一行Rails SQL命令可以为我做这件事 对这样的计算进行排序?
答案 0 :(得分:0)
:up
重命名为:vote
(我的偏好)<强>代码强>
@popular_links = Link.includes(:votes).top
def self.top
self.all.sort do |a, b|
a_votes = a.votes.sum(:up)
b_votes = b.votes.sum(:up)
b_votes <=> a_votes
end.first(6)
end
- or -
def self.top
self.joins(:votes).select("links.*, SUM(votes.up) as votes_num").order("votes_num DESC").limit(6)
end
我在这里找到第二个:Ruby on Rails, find top 5 Users ordered by purchases
在数据库级别,您的boolean
列在MYSQL中只是tinyint
(请检查data types here),这意味着true
/ false
将会是1
或0
。因此,该列的总和将给出链接的净投票