2016-12-29 5 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(/[.\/]/, ''). Во-первых, вы вызываете метод gsub на символ :cpf, и этот метод не существует. Попробуйте в 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

Смежные вопросы