偶尔具有第二个值的 Rails 属性的数据类型和方法



我有一个用例,用户点击一个单词并看到有关其基本单词的信息。偶尔会有一些单词具有两种不同但同样接受的拼写,具有相同的含义,当发生这种情况时,我想显示替代拼写(西班牙语示例:"video"和"vídeo",或"quizá"和"quizás"(。

同样,有时base_word需要两个inflection_forms

BaseWord模型具有base_word:stringinflection_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)

最新更新