2015-06-28 2 views
0

Вот моя модельRails Validation Триггеры по сбросу пароля

class User < ActiveRecord::Base 
# Include default devise modules. Others available are: 
# :confirmable, :lockable, :timeoutable and :omniauthable 
has_many :events 
has_many :appointments 

validates :name, presence: true 
validates :name, format: {with: /\A[[:alnum:]]+\z/, message: 'solo se permiten letras y/o numeros' }, if: 'name.present?' 
validates :lastname, format: {with: /\A[[:alnum:]]+\z/, message: 'solo se permiten letras y/o numeros' }, if: 'lastname.present?' 
validates :lastname, :presence => true 

validates :document, :presence => true 
validates_numericality_of :document, :on => :create, :message => "no es un numero", if: 'document.present?' 

validates :cellphone, :presence => true 
validates :cellphone, numericality:{ only_integer: true, message:"no es un numero"}, if: 'cellphone.present?', :on => :create 
validates :cellphone, numericality:{ only_integer: true, message:"no es un numero"}, if: 'cellphone.present?', :on => :update 
validates :cellphone, format: { with: /\d{11}/, message: "mal formato, deben ser 11 digitos, incluyendo codigo de area" }, if: "cellphone.present?", :on => :create 
validates :cellphone, format: { with: /\d{11}/, message: "mal formato, deben ser 11 digitos, incluyendo codigo de area" }, if: "cellphone.present?", :on => :update 

validates :phone, :presence => true 
validates :phone, numericality:{ only_integer: true, message:"no es un numero"}, if: "phone.present?", :on => :create 
validates :phone, format: { with: /\d{11}/, message: "mal formato, deben ser 11 digitos, incluyendo codigo de area" }, if: "phone.present?", :on => :create 

validates_format_of :email,:with => Devise::email_regexp, :allow_blank => true 

devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 

    def medic_with_spec 
     "#{especialidad}, #{name} #{lastname}"   
    end 

    def evento_sin 
     events.where(available: "1") 
    end 

конец

, как вы можете увидеть подтверждение: телефон имеет: на => создать и: на => обновление, так что моя проблема в том, что, когда я сбрасываю свой пароль с электронной почты и нажимаю обновление с новым паролем, он показывает ошибки проверки сотового телефона, так как он имеет: on => update. Как я могу заставить это исчезнуть?

Я попытался, если: «cellphone.nil?», Он отлично работает, потому что мобильный телефон является obvioulsy пустым (для сброса пароля требуется только пароль и подтверждение пароля), но когда я перехожу к редактированию информации об учетной записи, он не проверяет значение не-нуль.

Im использованием разработки.

Я прочитал эту ссылку Validation errors are triggered when I'm trying to reset password, ее точно такая же проблема, но я понятия не имею, как реализовать то, что они сказали.

Im новый на рубине на рельсах, если some1 может помочь мне с этим, я понятия не имею, как реализовать предварительный рубин.

+1

Лично я использую отдельные объекты формы для вещей, как это, по крайней мере, когда это просто , Раньше я использовал контекстно-зависимую проверку, но проще всего создавать крошечные DTO, и это еще больше отделяет представление от объектов домена. YMMV. –

+0

Нет подсказки из этого, извините –

ответ

0

вы должны отключить проверку, если password_confirmation Поле не равно нулю (это означает, что пароль был изменен). Вот связана тема Skip validation for some members in Devise model during password reset

Таким образом, в вашем случае это будет: (. Один из моих колик о Rails)

validates :cellphone, numericality:{ only_integer: true, message:"no es un numero"}, :if => :not_recovering_password, :on => :update 

def not_recovering_password 
    password_confirmation.nil? 
end 
Смежные вопросы