2016-12-29 1 views
0

Ich habe ein JavaScript, um einen Wert in meinem Formular zu maskieren. Ich versuche, diese Maske zu entfernen, bevor es in db speichern, aber ich habe ProblemeEntfernen der Maske vor dem Speichern in DB

Modell:

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

Fehler

undefined method `gsub' for :cpf:Symbol 
 

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

 

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

 
end

Wie kann ich es lösen?

Antwort

0

Wie die Fehlermeldung Ihnen sagt, ist die Zeile :cpf.gsub(/[.\/]/, '') das Problem. Zunächst rufen Sie die Methode gsub für ein Symbol :cpf auf, und die Methode existiert nicht. Probieren Sie es in irb.

Zweitens, auch wenn dies nicht der Fall wäre, würde es keinen Unterschied machen - der Code wird nur einmal ausgeführt, wenn die Klasse geladen wird und nicht jedes Mal ausgeführt werden, wenn Sie eine neue Partner speichern . Sie müssen ein before_validationcallback fügen Sie Ihren Code jedes Mal, wenn Sie ein neues Objekt erstellen laufen, was in etwa so aussehen würde:

class Partner 
    #... 
    before_validation :unmask_cpf 

    #... 

    private 

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

Danke für Ihre Hilfe. Gute Antwort! – Kirk

0

gsub ist eine Methode für Strings, daher können Sie zuerst .to_s auf dem Symbol aufrufen.

+0

Dadurch wird der Fehler nicht passiert zu stoppen, aber das 'cpf' Attribut nicht entlarvt werden . Alles was passieren würde ist, dass wenn die App zum ersten Mal gestartet wird, eine sinnlose Zeichenfolge "cpf" erstellt wird und ein sinnloser "gsub" (einmal) ausgeführt wird, bevor sie gelöscht wird. – omnikron

Verwandte Themen