【问题标题】:Rails: Dynamic Index Creation: A custom PHONE index dynamically generated for ActiveRecordRails:动态索引创建:为 ActiveRecord 动态生成的自定义 PHONE 索引
【发布时间】:2014-08-13 23:57:03
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

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

    class YourModel
    
      before_save :canonicalize_phonenumber, if: :phonenumber_changed?
    
      def canonicalize_phonenumber
        self.canonic_phonenumber = <function to canonicalize the string>(phonenumber)
      end
    

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

    【讨论】:

    • 有效!我发现我需要在等号后的电话号码前面包含 self 。 self.phonenumber 。对于任何想知道我如何处理字符串的人,我使用了 gem MightyString 及其方法 strip_byac("0123456789"),这意味着删除可接受的字符。
    猜你喜欢
    • 2016-08-19
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    相关资源
    最近更新 更多