Validación del modelo de rieles: ¿necesito validates_inclusion_of con mayúsculas y minúsculas falso?
-
29-10-2019 - |
Pregunta
Aquí hay un código que no funciona
class WeekDay < ActiveRecord::Base
validates_inclusion_of :day, :in => %w(sunday monday tuesday wednesday thursday friday saturday), :case_sensitive => false
end
Actualmente tengo todos los días en DB excepto el domingo.Estoy intentando agregar "Domingo", y obtengo errores "no está incluido en la lista".
Solución
validates_inclusion_of no tiene un argumento sensible a mayúsculas y minúsculas, por lo que puede crear su propio validador (si está utilizando Rails 3):
class DayFormatValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
unless %w(sunday monday tuesday wednesday thursday friday saturday).include?(value.downcase)
object.errors[attribute] << (options[:message] || "is not a proper day.")
end
end
end
y guárdelo en su directorio lib como:
lib/day_format_validator.rb
Luego, en su modelo, puede tener:
validates :day, :day_format => true
Solo asegúrese de que rails cargue este archivo lib al inicio colocándolo en su config / application.rb:
config.autoload_paths += Dir["#{config.root}/lib/**/"]
Otros consejos
class WeekDay < ActiveRecord::Base
before_validation :downcase_fields
validates_inclusion_of :day, :in => %w(sunday monday tuesday wednesday thursday friday saturday)
def downcase_fields
self.day.downcase!
end
end
Esto reduce el campo antes de ejecutar la validación
Una pequeña solución simple si no le preocupa separar validaciones en lib
class WeekDay < ActiveRecord::Base
validate :validate_day
def validate_day
if !self.day.nil?
errors.add(:day, "is not included in the list") unless %w(sunday monday tuesday wednesday thursday friday saturday).include?(self.day.downcase)
end
end
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow