2017-04-25 31 views
0

我正在做一個目前的項目,我正在使用一個設計..在我註冊(使用設計)我有字段命名手機號碼,當我點擊註冊/提交按鈕它將被保存到我的表格中,但在保存之前,我會連接國家代碼(+63。例如:我輸入1234567891,在我的表格中它將變成這樣+631234567891)。之前保存電話回撥紅寶石

我使用before_save方法/函數,但我有一個問題,每當我點擊登錄/確認電子郵件/註銷它將增加另一個+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 

回答

1

試試這個過程中添加+63。如果對象沒有被保留,只更新手機。

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

您驗證的方法是長度爲10,這就是爲什麼保存它時檢查驗證。更改驗證如下:

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

飼養長度13將允許你保存+63保存之前。 希望這有助於。快樂的編碼。 :)

2
before_save :add_country_code, unless: :mobile_no 
  • 這只是附加+63當mobile_no是空白的(只在註冊時發生,或更新提供的用戶信息時,沒有mobile_no還)
+0

我覺得有一些正確的代碼..它必須是,除非:mobile_no – Angel

+0

Annd先生,現在當我提出這 – Angel

+0

我不知道,你可以將其添加didt加國家代碼',除非:' ! – HashRocketSyntax

2

您可以用before_create代替before_save。無論您何時登錄,設計都會更新其他一些列,如last_signed_in_at,因此會觸發before_save

但是,如果用戶想要更新電話號碼,您真的可能需要檢查是否有國家代碼的前綴。

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

雖然這段代碼片段是受歡迎的,並且可能會提供一些幫助,但它會[如果它包含解釋](/ meta.stackexchange.com/q/114762)* [如何解決該問題] [會大大改進。沒有這些,你的答案就沒有什麼教育價值了 - 記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –