2010-09-03 14 views
5

Esta es probablemente una pregunta simple, pero me di cuenta de algunos errores que deriva de tener valores vacíos en lugar de Nils ...carriles Nils en una forma

Si un usuario deja un campo en blanco en una aplicación de rieles estándar es allí una forma de dejar el campo en la base de datos establecida en NULL en lugar de ingresar un valor vacío?

Básicamente, por lo que un cheque como @ model.info.nil? ¿Devuelve verdadero en lugar de tener que comprobar si es nulo y está vacío?

Respuesta

4

utilizo var.blank ?, porque consigo estos resultados en una consola de Rails 3 corriendo en contra de Ruby 1.8:

>> nil.blank? 
=> true 
>> [].blank? 
=> true 
>> nil.empty? 
NoMethodError: You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.empty? 
     from (irb):4 

Históricamente, no he visto .empty? trabajo para objetos nulos.

+0

Gracias por señalar eso, ¿debería estar en blanco? en efecto. –

1

edición Como brokenbeatnik observó, me confunde con blank?empty?, mi mal.

No es necesario que marque valores nulos y vacíos. var.empty? devolverá true incluso para nil (vea los documentos de la API). Por lo tanto, generalmente me resulta más conveniente usar solo cheque vacío.

Pero si no lo desea, puede convertir valores vacíos a nils con active record callbacks. Algo así como attribute = nil if attribute.empty? cada vez que se guarda el objeto.