gpt4 book ai didi

ruby - rails 在保存前去除非数值

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:21 24 4
gpt4 key购买 nike

我已经搜索过了,看起来这应该很简单,但我无法让它工作。我试图在保存电话号码之前删除所有非数字字符。这是我目前拥有的:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com