首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >父实体按选票差异排序

父实体按选票差异排序
EN

Stack Overflow用户
提问于 2013-09-13 22:32:53
回答 2查看 53关注 0票数 0

我有三个模型看起来像这样(我刚刚把重要的东西留给了问题):

代码语言:javascript
复制
class Symbol < ActiveRecord::Base
  has_many :mnemonic
end

class Mnemonic < ActiveRecord::Base
  belongs_to :symbol
  has_many :mnemonic_votes
end

class MnemonicVote < ActiveRecord::Base
  belongs_to :mnemonic
  attr_accessible :vote_up
end

:vote_up是布尔型的,如果为true,表示有人投了助记符,如果为false,则表示有人投了反对票。

我想通过投票差异来获得前三名助记符。假设数据库中有5条助记符记录,其上/下投票数如下(MnemonicVote记录为:vote_up字段的true/false ):

代码语言:javascript
复制
mnemonic      up   down  total
mnemonic1      3     2     1
mnemonic2     17     3    14
mnemonic3      2     5    -3
mnemonic4     11     7     4
mnemonic5      5     5     0

我想按降序得到以下三个助记符(有计数):

代码语言:javascript
复制
mnemonic2  14
mnemonic4   4
mnemonic1   1

我编写了这段实际的代码,给出了我想要的结果,但我知道这很糟糕,我不喜欢我是如何做到的,因为在从DB中获取了与certaing Mnemonic记录关联的所有MnemonicVote记录之后,数据就会进行分组和排序:

代码语言:javascript
复制
@mnemonics = Mnemonic.where(symbol_id: self.id)   # here I fetch all Mnemonics associated with Symbol table
@mnemonics.sort_by { |mnemonic| mnemonic.votes_total }.reverse!
return @mnemonics.take(3)

其中mnemonic.votes_total是Mnemonic对象上的计算属性。我希望通过使用单个AR (甚至SQL)查询来获得相同的结果。如何才能做到这一点?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-14 06:29:35

这两个答案都在正确的轨道上,除了不适用于PostgreSQL的IF子句(我将得到函数if(布尔值、整数、整数)不存在)。这是我的最后一个解决方案,以防有人需要它:

代码语言:javascript
复制
Mnemonic.
  select("mnemonics.*, SUM(CASE WHEN mnemonic_votes.vote_up THEN 1 ELSE -1 END) AS votes_total").
  joins(:mnemonic_votes).
  where(symbol_id: self.id).
  group("mnemonics.id").
  order("votes_total DESC").
  limit(3)
票数 0
EN

Stack Overflow用户

发布于 2013-09-13 23:00:52

我相信这就是你想要的:

代码语言:javascript
复制
Mnemonic.
  joins(:mnemonic_votes).
  select("mnemonics.*, SUM(IF(mnemonic_votes.upvote, 1, -1)) AS vote").
  group("mnemonics.id").
  order("vote DESC").
  map { |m| [m.symbol, m.vote.to_i] }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18796232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档