2012-05-22 7 views
14

En una aplicación de Rails tengo varios atributos enteros en un modelo.¿Cómo validar la numeración e inclusión al tiempo que permite que el atributo sea nulo en algunos casos?

Un usuario debería poder crear un registro y dejar estos atributos en blanco.

O, si el usuario ingresa valores para estos atributos, deben ser validados por su número y dentro de un cierto rango.

En el modelo que tengo algo como esto

validates_presence_of :name  
validates_numericality_of :a, :only_integer => true, :message => "can only be whole number." 
validates_inclusion_of :a, :in => 1..999, :message => "can only be between 1 and 999." 

Si ahora prueba con el mínimo requerido atribuye a ahorrar:

factory :model do 
    sequence(:name) { |n| "model#{n}" } 
end 

it "should save with minium attributes" do 
    @model = FactoryGirl.build(:model) 
    @model.save.should == false 
end 

me sale

Validation failed: a can only be whole number., a can only be between 1 and 999. 

¿Cómo puedo validar la numericalidad y la inclusión solo si se da un valor para :a, mientras se permite :a para ser nil en algunos casos?

Gracias

Respuesta

29

Se puede añadir una :allow_nil => true a su validates_numericality_of.

validates_numericality_of :a, :only_integer => true, :allow_nil => true, 
    :message => "can only be whole number." 

También puede utilizar greater_than_or_equal_to y less_than_or_equal_to opciones si lo que desea es utilizar uno de validación:

validates_numericality_of :a, :only_integer => true, :allow_nil => true, 
    :greater_than_or_equal_to => 1, 
    :less_than_or_equal_to => 999, 
    :message => "can only be whole number between 1 and 999." 
+0

gracias, gran respuesta –

3

deben ser simplemente:

validates_numericality_of :a, :only_integer => true, :message => "can only be whole number.", :allow_nil => true 

mismo para la segunda validación

+0

gracias, esto era justo lo que necesitaba. Le he dado la respuesta a Shadwell por su código DRY. Es una pena que no pueda marcar ambos como correctos. –

Cuestiones relacionadas