作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我已经搜索过了,看起来这应该很简单,但我无法让它工作。我试图在保存电话号码之前删除所有非数字字符。这是我目前拥有的:
before_save { |workorder| workorder.phonenumber =
phonenumber.to_s.gsub(/\D/, '').to_i }
所以如果用户输入
925-555-5555
它应该保存 9255555555 但它实际上只保存 925 并忽略之后的所有内容
我也试过:
before_save { |workorder| workorder.phonenumber =
phonenumber.to_s.gsub(/[^0-9]/, "").to_i }
同样的结果。
已解决:
def raw_phonenumber
self.phonenumber
end
def raw_phonenumber=(s)
self.phonenumber=s.gsub(/\D/, '')
end
最佳答案
您肯定已将 phonenumber
列定义为数字。这就是为什么当您在 phonenumber
属性中设置 '925-555-5555'
时,它被转换为一个数字,并且只保留 925
.
最好的解决方案是将数据库中列的类型更改为string
。创建一个新的迁移:
change_column :table_name, :phonenumber, :string, limit: 30
否则,您可以像这样重写 setter 以删除非数字字符(但它不会修复以“0”开头的电话号码):
def phonenumber=(phonenumber)
write_attribute(:phonenumber, phonenumber.gsub(/\D/, ''))
end
此 blog post 中的更多选择
关于ruby - rails 在保存前去除非数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12645083/
我是一名优秀的程序员,十分优秀!