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
回调在这里会很有帮助)。然后只需查询该属性。