我正在做一个当前的项目,我正在使用一个设计..在我的注册(使用设计)我有字段名为手机号码,当我点击注册/提交按钮它将保存到我的表但在它保存之前我会连接国家代码(+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
答案 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