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

Ruby on rails 3 Ruby WHERE子句-列出重复对象(Postgresql),ruby-on-rails-3,postgresql,Ruby On Rails 3,Postgresql,我正在使用AFINN 111确定帖子的态度,可以找到 . 每当文章中提到这些单词中的一个时,就会选择并添加相应的值,以给出累积分数,这有助于确定文章的性质,无论是+ve还是-ve 我有一个数组content=[“坏”、“坏”、“狗”]。 我想得到这篇文章中使用的单词的总分。因此,我启动了一个db查询 score = Sentiment.where(word: content).pluck(:value).inject(:+) 我得到的结果是-3。“坏”一词对应的分数为-3。因为单词“bad”重

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

我有一个数组
content=[“坏”、“坏”、“狗”]
。 我想得到这篇文章中使用的单词的总分。因此,我启动了一个db查询

score = Sentiment.where(word: content).pluck(:value).inject(:+)
我得到的结果是-3。“坏”一词对应的分数为-3。因为单词“bad”重复了两次,所以我希望结果分数是-6

我试着在rails控制台中启动它来检查返回了多少对象

 Sentiment.where(:id => [1,1])
只返回一个对象…是否有允许返回重复值的选项

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

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

但这将涉及触发n个查询,而不是用一个查询完成任务。。。是否有其他方法实现此目的?

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

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

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

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

如果您能够在插入之前处理内容,则可以将每个单词的计数存储在数据库中。您可能需要将列的数据类型更改为hstore。或者,您可以对返回整数的单词进行计数,并将其乘以分数。如果您能够在插入之前处理内容,则可以将每个单词的计数存储在数据库中。您可能需要将列的数据类型更改为hstore。或者,你也可以对返回的整数进行计数,然后再乘以你的分数。谢谢。。我对你的代码做了一个小小的修改。。。我增加了这个条件。。如果情感[话语]在场?通过这种方式,我们可以避免情绪模型中没有的单词出现零级错误:)一旦我得到最低代表分数,我将投票支持你的答案:)哦,是的,你适合这个条件。谢谢你的分数!谢谢你。。我对你的代码做了一个小小的修改。。。我增加了这个条件。。如果情感[话语]在场?通过这种方式,我们可以避免情绪模型中没有的单词出现零级错误:)一旦我得到最低代表分数,我将投票支持你的答案:)哦,是的,你适合这个条件。谢谢你的分数!