我有一个用例,用户点击一个单词并看到有关其基本单词的信息。偶尔会有一些单词具有两种不同但同样接受的拼写,具有相同的含义,当发生这种情况时,我想显示替代拼写(西班牙语示例:"video"和"vídeo",或"quizá"和"quizás"(。
同样,有时base_word
需要两个inflection_forms
。
BaseWord
模型具有base_word:string
、inflection_form:string
(即'ND3XX
"(和language_id
的属性。处理相关单词base_word
has_many :inflections
,但为具有相同语法作用的不同拼写单词创建新的屈折似乎很愚蠢。
我尝试将这两个字段序列化为一个Array
,然后作为Set
,但在这两种情况下,我都无法查询数据库以查找base_word
等于集合/数组成员之一的base_words
。
处理此案最合乎逻辑的方法是什么?
由于您使用的是Postgres,因此您可以使用它内置的数组类型,可以使用SQL查询进行查询 http://edgeguides.rubyonrails.org/active_record_postgresql.html#array。
更新 1:查询示例
是的,它不是那么简单,但是,假设您在迁移中添加了 array 类型的inflections
列,您应该能够通过以下方式隐藏复杂性:
class BaseWord < ActiveRecord::Base
...
scope :has_inflection, -> (word) { where('? = ANY(inflections)', word) }
然后像使用任何其他范围一样使用它。例如。
BaseWord.has_inflection('vídeo').order('base_word').limit(5)