2011-11-02 8 views
55

Estoy tratando de guardar un registro que no tiene un campo configurado, que tiene una validación numérica en los modelos. Aunque no se requiere la presencia en la validación, sigue arrojando un error de que el campo no es un número. modeloLa validación de los rieles requiere un valor numérico aunque la presencia no está establecida en verdadero

validates :network_id, :numericality => true 

Código a que es el ahorro::

Validación

networks.each do |network| 
    network.url = network.raw_data.link 
    network.save! 
end 

error:

Validation failed: Network is not a number 

Respuesta

108
validates :network_id, :numericality => true, :allow_nil => true 
+1

misma respuesta, mismo tiempo => +1 – apneadiving

+0

@Unixmonkey ¿Esto se necesitaría para cada campo en el DB que permita valores nulos? o hay una manera de dejar que los rieles manejen esto automáticamente (parece un poco doloroso para establecer la presencia o allow_nil) – Hopstream

+0

@Hopstream Si está validando la numérica, entonces nil no es un valor numérico. Tienes que permitirlo explícitamente. No necesita hacer esto para todos los campos. – Unixmonkey

14

Debe utilizar allow_blank

validates :network_id, :numericality => true, :allow_blank => true 
+0

oh hombre - pensé que permitir cero era el predeterminado. ¿Debo agregar eso a todos los campos que están permitidos? tipo de parece redundante en la parte de los carriles. – Hopstream

+1

@apneadiving Puedo estar equivocado ... debería ser 'validates: network_id,: numericality => {: allow_blank => true}', ¿no es así? –

+0

@Hopstream: mira mi enlace: La opción: allow_blank es similar a la opción: allow_nil – apneadiving

38
validates :network_id, :numericality => {:allow_blank => true} 
+3

Creo que esa era la manera correcta de escribirlo, +1 luego – apneadiving

+0

Es más útil la respuesta –

+0

Esto es de hecho mejor como permite cadenas vacías: http://edgeguides.rubyonrails.org/active_record_validations.html#allow-blank – Hopstream

9

En Rails 4 (Ruby 2), se puede escribir:

validates :network_id, numericality: { greater_than_or_equal_to: 0, allow_nil: true } 
+2

No sé por qué esto no funciona para mí. Estoy usando Rails 4.2. Con esa validación, puedo guardar con valor nulo, pero también permite guardar cadenas. – leandrotk

0

También puede escribir así ...

validates_numericality_of :network_id, allow_nil: true 
Cuestiones relacionadas