Ruby on rails 活动记录单个字段上的多个条件

Ruby on rails 活动记录单个字段上的多个条件,ruby-on-rails,postgresql,activerecord,Ruby On Rails,Postgresql,Activerecord,我有以下模型关联: class-PartOfSpeech

我有以下模型关联:

class-PartOfSpeech
我已经给出了一组
词性ID
say[1,2,3]。有了这些联想,我必须找到所有包含这些部分演讲的词。必须显示带有
词类ID的单词,但不能显示只有[1,2,3,4]的单词

在中使用进行查询将不会给出正确的结果,因为它会执行操作。我想要在数组元素上执行的东西


请提供帮助。

如果您的联接表中的
word\u id
part\u of\u speech\u id
具有唯一的索引,您可以只计算匹配记录:

word_ids = PartOfSpeechWord.
  select('min(word_id) AS word_id').
  where(part_of_speech_id: part_of_speech_ids).
  group_by(:part_of_speech_id).
  having('COUNT(part_of_speech_id) >= ?', part_of_speech_ids.size).
  map { |x| x['word_id'] }

word = Word.where(id: word_ids)

请仔细研究一下:当我的词性ID为[1,2,3]时,有没有办法对匹配[1,2,3],然后是[1,2]和最后[1]的结果排序。我知道这不是我以前的要求。但是也需要在逻辑中添加这个,例如,您可以运行一系列查询。但引入某种缓存听起来更容易——您可以向
Word
模型添加
part\u speech\u id
数组属性,并在需要时更新它以缓存相关记录的id(
after\u touch
回调在这里会很有帮助)。然后只需查询该属性。