2012-04-29 20 views

Respuesta

42

es nil en Ruby, no null. Y es suficiente decir if @objectname para probar si no es nulo. Y no then. Puede encontrar más información sobre la sintaxis if aquí:

http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Control_Structures#if

+2

También sería recomendable jugar con 'rieles console' probar declaraciones sobre la mosca im – Jonathan

+0

tener éste si @ reviews.nil? entonces y siempre es cierto, incluso si hay una opinión o no –

+0

no debe haber 'then' en su' if'. También es posible que desee explicar un poco más acerca de cómo llena las '@ reviews' (si de hecho es' .nil? 'Todo el tiempo) para que podamos darle más ideas. –

29

Puede comprobar si un objeto es nulo (null) llamando al presente? o en blanco? .

@object.present? 

esto devolverá falso si el proyecto es una cadena vacía o nula.

o puede utilizar

@object.blank? 

este es el mismo que el presente? con un golpe y puedes usarlo si no te gusta 'menos'. esto devolverá true para una cadena vacía o nula.

+0

funciona ahora gracias. He usado el espacio en blanco –

+0

'#blank?' y '#present?' tienen otras implicaciones además de si el objeto es 'nil'. Y 'then', aunque poco común, está bien en las declaraciones de Ruby if. –

4

En su ejemplo, puede simplemente reemplazar null con `nil y funcionará bien.

require 'erb' 

template = <<EOS 
<% if (@objectname != nil) then %> 
    @objectname is not nil 
<% else %> 
    @objectname is nil 
<% end %> 
EOS 

@objectname = nil 
ERB.new(template, nil, '>').result # => " @objectname is nil\n" 

@objectname = 'some name' 
ERB.new(template, nil, '>').result # => " @objectname is not nil\n" 

Al contrario de lo que dijo el otro cartel, se puede ver por encima de ese then funciona bien en Ruby. No es común, pero está bien.

#blank? y #present? tienen otras implicaciones. Específicamente, si el objeto responde al #empty?, verificará si está vacío. Si va al http://api.rubyonrails.org/ y busca "¿en blanco?", Verá en qué objetos está definido y cómo funciona. Mirando definition on Object, vemos "Un objeto está en blanco si es falso, vacío o una cadena de espacios en blanco. Por ejemplo," "," ", nil, [] y {} están en blanco." Debe asegurarse de que esto es lo que desea.

Además, nil se considera falso, y todo lo que no sea falso y nulo se considera verdadero. Esto significa que puede colocar directamente el objeto de la sentencia if, por lo que una forma más canónica de escribir lo anterior sería

require 'erb' 

template = <<EOS 
<% if @objectname %> 
    @objectname is not nil 
<% else %> 
    @objectname is nil 
<% end %> 
EOS 

@objectname = nil 
ERB.new(template, nil, '>').result # => " @objectname is nil\n" 

@objectname = 'some name' 
ERB.new(template, nil, '>').result # => " @objectname is not nil\n" 

Si necesita explícitamente para comprobar nil y no false, puede utilizar el método #nil?, por que nil es el único objeto que hará que esto vuelva verdadero.

nil.nil?   # => true 
false.nil?  # => false 
Object.new.nil? # => false