¿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?
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 %>
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
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í
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.'
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
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!
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