如何检查rails中是否定义了变量?

cjm*_*671 32 ruby ruby-on-rails erb

<% if dashboard_pane_counter.remainder(3) == 0 %>
  do something
<% end>
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*att 50

<% 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 %>
Run Code Online (Sandbox Code Playgroud)

  • 符号对我不起作用.所以我必须检查这个方式`如果定义?(variable_name)` (15认同)

Yul*_*ule 5

使用rails和实例变量时,nil try定义了一个方法,因此你可以这样做:

<% if @dashboard_pane_counter.try(:remainder(3)) == 0  %>
   #do something
<% end %>
Run Code Online (Sandbox Code Playgroud)

因此,如果未定义实例变量,try(:anything)则返回nil,因此计算结果为false.而且nil == 0是假的


kat*_*tan 5

可以使用local_assigns,因为这个问题来自几年前,所以我验证了它在以前版本的rails中是否存在

<% if local_assigns[:dashboard_pane_counter] 
                 && dashboard_pane_counter.remainder(3) == 0%>
<% end %>
Run Code Online (Sandbox Code Playgroud)

在这里的笔记中

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