Rails:动态索引创建:为ActiveRecord动态生成的自定义PHONE索引

时间:2014-08-13 14:59:03

标签: ruby-on-rails activerecord

我想确保电话号码的纯索引并保留原始电话号码字符串。

用户基本上可以输入1(234)567-8901 ext 234之类的数字,并将其保存为字符串。我希望有一个索引列,可以自动生成此12345678901234的精简版本。这样我就可以通过不同的界面轻松查找数字,或者不用担心原始输入。

我应该在哪里编写代码以确保在电话表的数字列中创建数字版本?是否有 on-create-or-update-generate-converted-index 方法来执行此操作?它将从多个控制器访问,并且是多态的。

谢谢!

1 个答案:

答案 0 :(得分:2)

我会创建第二个字段canonic_phonenumber并使用带有before_save选项的if在字符串更改时填充此字段

class YourModel

  before_save :canonicalize_phonenumber, if: :phonenumber_changed?

  def canonicalize_phonenumber
    self.canonic_phonenumber = <function to canonicalize the string>(phonenumber)
  end

在第二个字段中,您可以设置索引。