我如何检查rails 2上ruby中的对象是否为null?

时间:2012-04-29 11:17:25

标签: ruby-on-rails ruby ruby-on-rails-2

我想检查我的对象@objectname何时不等于null以显示@objectname else的值,以显示未找到任何值。

我试过了:

<% if (@objectname != null) then %>

但我收到了错误。

5 个答案:

答案 0 :(得分:55)

在Ruby中是nil,而不是null。并且足以说if @objectname来测试它是否不是零。没有then。您可以在此处找到有关if语法的更多信息:

http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Control_Structures#if

答案 1 :(得分:37)

您可以通过调用present检查对象是否为nil(null)?还是空白?

@object.present?

如果项目是空字符串或nil,则返回false。

或者您可以使用

@object.blank?

这和现在一样吗?如果你不喜欢'除非',你就可以使用它。 对于空字符串或nil,这将返回true。

答案 2 :(得分:11)

现在使用Ruby 2.3,您可以使用&.运算符('lonely operator')在访问值的同时检查nil

@person&.spouse&.name

https://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Operators#Other_operators

请改用#try,这样您就不必继续检查nil

http://api.rubyonrails.org/classes/Object.html#method-i-try

@person.try(:spouse).try(:name)

而不是

@person.spouse.name if @person && @person.spouse

答案 3 :(得分:5)

在你的例子中,你可以简单地用{nil替换null,它会正常工作。

require 'erb'

template = <<EOS
<% if (@objectname != nil) then %>
  @objectname is not nil
<% else %>
  @objectname is nil
<% end %>
EOS

@objectname = nil
ERB.new(template, nil, '>').result # => "  @objectname is nil\n"

@objectname = 'some name'
ERB.new(template, nil, '>').result # => "  @objectname is not nil\n"

与其他海报所说的相反,你可以看到上面then在Ruby中运行良好。这不常见,但很好。

#blank?#present?还有其他含义。具体来说,如果对象响应#empty?,它们将检查它是否为空。如果您转到http://api.rubyonrails.org/并搜索“空白?”,您将看到它定义的对象及其工作原理。查看definition on Object,我们看到“如果对象是空的,空的或空白字符串,则该对象为空。例如,”“,”“,nil,[]和{}都是空白的。“你应该确保这就是你想要的。

此外,nil被视为false,除false和nil之外的任何内容都被视为true。这意味着您可以直接将对象放在if语句中,因此编写上述内容的更规范的方法是

require 'erb'

template = <<EOS
<% if @objectname %>
  @objectname is not nil
<% else %>
  @objectname is nil
<% end %>
EOS

@objectname = nil
ERB.new(template, nil, '>').result # => "  @objectname is nil\n"

@objectname = 'some name'
ERB.new(template, nil, '>').result # => "  @objectname is not nil\n"

如果您明确需要检查nil而不是false,则可以使用#nil?方法,其中nil是唯一会导致此值返回true的对象。

nil.nil?          # => true
false.nil?        # => false
Object.new.nil?   # => false

答案 4 :(得分:0)

您可以使用简单的not标志进行验证。 例子

if !@objectname

如果@objectname为nil,则返回true。 您不应该使用点运算符或nil值,否则它将抛出

  

*** NoMethodError异常:未定义的方法'isNil?'为nil:NilClass

理想的nil检查如下:

!@objectname || @objectname.nil? || @objectname.empty?