关于ruby:如何检查rails中是否定义了变量?

How do I check if a variable is defined in rails?

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

如果未定义dasboard_pane_counter,如何将其评估为false而不是抛出异常?


1
2
3
<% 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 %>


local_assigns可以用于此,因为这个问题来自几年前,我验证它存在于以前版本的rails中

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

这是在这里的笔记

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


使用rails和实例变量时,nil定义了try方法,因此您可以执行以下操作:

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

因此,如果未定义实例变量,try(:anything)将返回nil,因此计算结果为false。并且nil == 0是错误的


为像我这样的初学者编写这个答案。这个问题可以简单地使用两个步骤(如果使用&amp;&amp;)就可以回答。这是一个更长,更不漂亮的答案,但帮助新编码员了解他们正在做什么,并使用一种非常简单的技术,这在任何其他答案中都不存在。诀窍是使用实例(@)变量,它不适用于局部变量:

1
2
3
if @foo
 "bar"
end

如果定义了@foo,则返回"bar",否则返回(没有错误)。因此分两步:

1
2
3
4
5
if @dashboard_pane_counter
  if @dashboard_plane_counter.remainder(3) == 0
    do something
  end
end

另一种方式,有一个整洁的宝石,是'andand。'

https://github.com/raganwald/andand


绝缘

1
if !var.nil?

我会用

1
unless var.nil?

这是更好的红宝石代码!