2015-10-15 25 views
-2

我的用户除了数字的所有字符都给予这些输入地带的Rails

123 - 4567 - 5665

123124-124325

但我需要提交它们在形式上只能用数字。另外,我不能指望用户通过给他们提醒来为我做。这对他们来说太不方便了。

所以导致在DB应该是我使用在轨道上4.2红宝石这个12345675665

我应该使用哪种过滤器?

+0

非常感谢。但我应该在哪里放这个代码? '高清raw_phonenumber self.phonenumber 结束 高清raw_phonenumber =(S) self.phonenumber = s.gsub(/ \ d /, '') end' – DanielsV

回答

2
class YourModel < ActiveRecord::Base 

    before_validation :tweak_my_attribute 

    def tweak_my_attribute 
    self.my_attribute = my_attribute.to_s.gsub(/\D/, '') 
    end 

end 
+0

你的答案是正确的,因为它只会每处理这实例性能并不是一个巨大的因素,但是'String#scan'在这些情况下实际执行得更快,例如'my_attribute.to_s.scan(/ \ d + /)。join' – engineersmnky

+0

非常感谢!它完美的作品。接受答案! – DanielsV

+0

@engineersmnky我见过之前提到过的,但是我不知道这次'\ d +'是真正的钥匙吗?或者我做我的基准测试错误?我从我的一张桌子上拿下了大约25K个电话号码。 (我很好奇)https://gist.github.com/phallstrom/c03bd7a1182d5ebdcb18 –