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

时间:2011-10-18 10:56:14

标签: ruby-on-rails ruby erb

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

如果未定义dasboard_pane_counter,我怎样才能将其评估为false而不是抛出异常?

6 个答案:

答案 0 :(得分:48)

<% 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 %>

答案 1 :(得分:5)

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

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

因此,如果未定义实例变量,try(:anything)将返回nil,因此评估为false。 nil == 0是假的

答案 2 :(得分:3)

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

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

这是在这里的笔记

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

答案 3 :(得分:0)

将此答案发布给像我这样的初学者。只需使用两个步骤即可回答此问题(如果使用&&,则可以回答一个步骤)。这是一个较长且不太漂亮的答案,但可以帮助新的编码人员理解他们在做什么,并使用一种非常简单的技术来解决其他问题。诀窍是使用实例(@)变量,它将不适用于局部变量:

if @foo
  "bar"
end

如果定义了@foo,它将返回“ bar”,否则将返回(没有错误)。因此分两个步骤:

if @dashboard_pane_counter
  if @dashboard_plane_counter.remainder(3) == 0
    do something
  end
end

答案 4 :(得分:-1)

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

https://github.com/raganwald/andand

答案 5 :(得分:-3)

而不是

if !var.nil?

我会用

unless var.nil?

这是更好的红宝石代码!