2016-12-29 60 views
0

我有一個JavaScript來掩蓋我的表單中的值。我想之前刪除這個面具將其保存以dB爲單位,但我有問題保存在數據庫之前刪除掩碼

型號:

class Partner < ApplicationRecord 
 
    belongs_to :address, dependent: :destroy 
 
    has_many :dependents 
 
    accepts_nested_attributes_for :address 
 
    
 
    # Validations # 
 
    # Validates presence of some attributes # 
 
    validates_presence_of :registry_number, :name, :secretary, :position, :base_salary, :rg, :cpf, :birthday, :email, :union_admission, :start_date 
 
    validates :registry_number, numericality: {only_integer: true} 
 
    
 
    # Validates the size of some attributes # 
 
    validates :registry_number, length: {maximum: 5} 
 
    validates :cpf, length: {is: 11} 
 
    validates :rg, length: {is: 9} 
 
    validates :phone_number, length: {maximum: 11} 
 

 

 
    :cpf.gsub(/[.\/]/, '') 
 

 
end

錯誤

undefined method `gsub' for :cpf:Symbol 
 

 
Extracted source (around line #18): 
 
16 
 
17 
 
18 
 
19 
 
20 
 
       
 

 

 
    :cpf.gsub(/[.\/]/, '') 
 

 
end

我該如何解決它?

回答

0

由於錯誤消息告訴你,行:cpf.gsub(/[.\/]/, '')是問題所在。首先,您在:cpf的符號上調用方法gsub,該方法不存在。試試irb。

其次,即使情況並非如此,它不會有任何區別 - 代碼只會在類加載時運行一次,並且每次保存新的代碼時都不會運行Partner 。您需要添加一個before_validationcallback在每次創建新對象時運行您的代碼,這將是這個樣子:

class Partner 
    #... 
    before_validation :unmask_cpf 

    #... 

    private 

    def unmask_cpf 
    cpf = cpf.gsub(/[.\/]/, '') 
    end 
end 
+0

感謝您的幫助。很好的答案! – Kirk

0

gsub是字符串的一種方法,因此您可以先在符號上調用.to_s

+0

這將阻止發生的錯誤,但'cpf'屬性不會被揭露。所有可能發生的情況是,當應用程序第一次啓動時,會創建一個無意義的字符串「cpf」,並在丟棄之前在其上運行一次無意義的「gsub」。 – omnikron

相關問題