validar validaciones realizan rails las formulario cómo ruby-on-rails ruby rails-activerecord

ruby-on-rails - realizan - validaciones rails



Rieles: valide solo en crear o en actualizar cuando el campo no esté en blanco (4)

Esto resultó ser un poco más simple de lo que pensaba. Cambié los nombres de entrada del formulario de password y password_confirmation a new_password y new_password_confirmation . Agregué accesores temporales para estos valores en mi modelo usando la siguiente línea:

attr_accessor :new_password, :new_password_confirmation

He implementado un password_changed? Método definido de la siguiente manera:

def password_changed? !new_password.blank? end

Finalmente, cambié mis validaciones a:

validates :new_password, presence: true, confirmation: true, length: { in: 6..20 }, on: :create validates :new_password, presence: true, confirmation: true, length: { in: 6..20 }, on: :update, if: :password_changed? validates :new_password_confirmation, presence: true, on: :create validates :new_password_confirmation, presence: true, on: :update, if: :password_changed?

Estoy seguro de que hay una mejor manera de hacer esto (esto no es muy SECO) pero por ahora, funciona. Respuestas mejoradas todavía serían muy apreciadas.

¿Cómo puedo restringir una validación de Rails para verificar solo en crear O cuando el campo no está en blanco? Estoy creando una página de configuración de usuario para una aplicación en la que estoy trabajando y el problema es que, al actualizar utilizando los parámetros proporcionados por el formulario, la configuración solo se guardará cuando haya una contraseña y una confirmación de contraseña. Me gustaría que estos campos de contraseña se validen en la creación sin importar qué, pero solo en la actualización cuando se proporcionan.


No es necesario cambiar los nombres de los campos, será suficiente para reemplazar :password_changed? a :password_digest_changed? en su codigo

validates :password, presence: true, confirmation: true, length: { in: 6..20 }, on: :create validates :password, presence: true, confirmation: true, length: { in: 6..20 }, on: :update, if: :password_digest_changed? validates :password_confirmation, presence: true, on: :create validates :password_confirmation, presence: true, on: :update, if: :password_digest_changed?


Por favor, inténtalo

validates :<attributes>, if: Proc.new{|obj| obj.new_record? || !obj.<attribute>.blank? }

o agregue nombres de métodos personalizados en lugar de nombres de atributos.


Si desea permitir valores en blanco use: allow_blank with validates.

class Topic < ActiveRecord::Base validates :title, length: { is: 5 }, allow_blank: true end

Si desea validar solo en crear, use on con validates.

class Topic < ActiveRecord::Base validates :email, uniqueness: true, on: :create end

Para cubrir su caso:

class Topic validates :email, presence: true, if: :should_validate? def should_validate? new_record? || email.present? end end