¿Cómo puedo comprobar si una variable está definida en rails?


<% if dashboard_pane_counter.remainder(3) == 0 %>
  do something
<% end>

Si dasboard_pane_counter no estaba definido, ¿cómo puedo hacer que esto se evalúe como falso en lugar de lanzar una excepción?

Author: cjm2671, 2011-10-18

6 answers

<% if defined?(:dashboard_pane_counter) && dashboard_pane_counter.remainder(3) == 0  %>
  # do_something here, this assumes that dashboard_pane_counter is defined, but not nil
<% end %>
 46
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-18 11:06:48

Cuando se utilizan rails y variables de instancia, nil tiene un método try definido, por lo que puede hacer:

<% if @dashboard_pane_counter.try(:remainder(3)) == 0  %>
   #do something
<% end %>

Así que si la variable de instancia no está definida, try(:anything) devolverá nil y por lo tanto evaluará a false. Y nil == 0 es falso

 5
Author: Yule,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-12 10:14:46

Local_assigns se puede usar para eso, ya que esta pregunta es de hace unos años, comprobé que existe en versiones anteriores de rails

<% if local_assigns[:dashboard_pane_counter] 
                 && dashboard_pane_counter.remainder(3) == 0%>
<% end %>

Está en las notas aquí

Http://apidock.com/rails/ActionController/Base/render

 3
Author: katzmopolitan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-27 18:48:23

Otra manera, con una gema limpia, es 'andand.'

Https://github.com/raganwald/andand

 0
Author: andrewpthorp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-18 13:50:02

Publicando esta respuesta para programadores principiantes como yo. Esta pregunta se puede responder simplemente usando dos pasos (o uno si se usa &&). Es una respuesta más larga y menos bonita, pero ayuda a los nuevos codificadores a entender lo que están haciendo y utiliza una técnica muy simple que aún no está presente en ninguna de las otras respuestas. El truco es usar una variable instance ( @ ), no funcionará con una variable local:

if @foo
  "bar"
end

Si se define @foo se devolverá "bar", de lo contrario no (sin error). Por lo tanto, en dos pasos:

if @dashboard_pane_counter
  if @dashboard_plane_counter.remainder(3) == 0
    do something
  end
end
 0
Author: Dennis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-05 01:21:39

Insted de

if !var.nil?

Usaría

unless var.nil?

Eso es mucho mejor código ruby!

 -2
Author: davidb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-18 11:12:22