hihorieles 3 validación de una cadena
¿Hay alguna manera de decirle a los rieles que mi cadena puede no ser "algo"?
Estoy buscando algo así como
validates :string, :not => 'something'
gracias klump
hihorieles 3 validación de una cadena
¿Hay alguna manera de decirle a los rieles que mi cadena puede no ser "algo"?
Estoy buscando algo así como
validates :string, :not => 'something'
gracias klump
Cualquiera de estos puede hacer el trabajo (click sobre los métodos para la documentación):
Probablemente la mejor y la manera más rápida, fácil de extender para otras palabras:
validates_exclusion_of :string, :in => %w[something]
Esto tiene una ventaja de utilizar una expresión regular, por lo que se puede generalizar más fácil:
validates_format_of :string, :without => /\A(something)\Z/
Se puede extender a otras palabras con /\A(something|somethingelse|somemore)\Z/
Este es el caso general con el que se puede lograr ninguna validación:
validate :cant_be_something
def cant_be_something
errors.add (:string, "can't be something") if self.string == "something"
end
para obtener exactamente la sintaxis que se propuso (validates :string, :not => "something"
) que puede utilizar este código (una advertencia, sin embargo, descubrí esto mientras leía la rama principal de la fuente de los rieles y debería funcionar, pero no funciona en mi ~ 3 meses de edad instale). Añadir esto en alguna parte en su camino:
class NotValidator < ActiveModel::EachValidator
def validate_each (record, attribute, value)
record.errors[attribute] << "must not be #{options{:with}}" if value == options[:with]
end
end
un par de maneras. Si tiene lista exacta de lo que no puede ser:
validates_exclusion_of :string, :in => ["something", "something else"]
Si desea asegurarse de que no existe como una subcadena en absoluto:
validates_format_of :string, :with => /\A(?!something)\Z/
Si es más complicado y desea ocultar los detalles desordenados:
validate :not_something
def not_something
errors.add(:string, "Can't be something") if string =~ /something/
end
+1 ¡Buenas cosas! Creo que nuestras respuestas están convergiendo :) –
Sí, supongo que ambos lo cubrimos bastante exhaustivamente;) Usar '\ A' y' \ Z' es probablemente una idea más segura: buena captura. –