Ruby WHERE子句 - 列出重复对象(Postgresql)

时间:2013-09-12 11:30:17

标签: ruby-on-rails-3 postgresql

我正在努力确定使用AFINN 111的帖子的态度,可以找到它 here。每当帖子中提到其中一个单词时,就会选择并添加相应的值,以给出累积分数,这有助于确定帖子的性质,无论是+ ve还是-ve。

我有一个数组content = ["bad", "bad", "dog"]。 我想得到这篇文章中使用的单词的总分。所以,我发起了一个数据库查询。

score = Sentiment.where(word: content).pluck(:value).inject(:+)

我得到的结果是-3。 “坏”这个词的对应分数为-3。由于“坏”这个词重复了两次,我希望得分为-6。

我尝试在rails控制台中触发它以检查返回的对象数。

 Sentiment.where(:id => [1,1])

只返回一个对象...是否有任何选项可以返回重复值?

一个相当简单的解决方案是遍历数组。

score = 0
content.each do |word|
score += Sentiment.where(word: word).pluck(:value).first
end

但是这将涉及触发多个查询,而不是通过单个查询完成工作......有没有其他方法可以实现这一目标?

1 个答案:

答案 0 :(得分:1)

一个查询的另一个解决方案:

content = ['bad', 'bad', 'dog']

sentiments = Sentiment.where(word: content).group_by(&:word)

score = 0

content.each do |word|
  score += sentiments[word].score if sentiments[word]
end

score #=> -6