在保存之前回拨ruby在轨道上

时间:2017-04-25 08:43:59

标签: ruby-on-rails ruby devise

我正在做一个当前的项目,我正在使用一个设计..在我的注册(使用设计)我有字段名为手机号码,当我点击注册/提交按钮它将保存到我的表但在它保存之前我会连接国家代码(+63。示例:我输入1234567891,在我的表中它将变成这样的+ 631234567891)。

我使用了before_save方法/函数但是我遇到了问题,每当我点击登录/确认电子邮件/注销时它会再添加+63(所以它会变成+ 63 + 63 ......) ..

问题:如何防止添加+63?它只会在注册期间添加+63

模型

before_save : add_country_code

validates :mobile_no, :presence => true,
              :numericality => true,
              :length => { :minimum => 10, :maximum => 10 }
def add_country_code
    self.mobile_no = "+63" + self.mobile_no.to_s
  end

5 个答案:

答案 0 :(得分:2)

before_save :add_country_code, unless: :mobile_no
  • 只有当mobile_no为空时才会附加+63(仅在注册时或在更新用户信息时发生,但尚未提供mobile_no

答案 1 :(得分:2)

您可以将before_save替换为before_create。无论何时登录,设计都会更新其他列,例如last_signed_in_at,因此会触发before_save

但实际上您可能想检查是否有国家/地区代码作为前缀,以防用户想要更新电话号码。

答案 2 :(得分:1)

试试这个。如果对象未持久,则仅更新手机。

def add_country_code
  self.mobile_no = "+63" + self.mobile_no.to_s unless persisted?
end

答案 3 :(得分:0)

您的验证方法的长度为10,这就是为什么在保存时检查验证的原因。更改验证如下:

validates :mobile_no, presence: true,
              numericality: true,
              length: { is: 13 }

保持长度13可以在保存前保存 +63 。 希望这可以帮助。快乐的编码。 :)

答案 4 :(得分:0)

def add_country_code
  self.mobile_no = '+63' << self.mobile_no.to_s.gsub(/\A\+63/, '')
end