我想检查我的对象@objectname
是否不等于null,如果是,则显示@objectname
的值,否则显示未找到任何值。
我尝试了这个:
<% if (@objectname != null) then %>
但是我遇到了一个错误。
我想检查我的对象@objectname
是否不等于null,如果是,则显示@objectname
的值,否则显示未找到任何值。
我尝试了这个:
<% if (@objectname != null) then %>
但是我遇到了一个错误。
在Ruby中,null
不是一个合法的值,而应该使用nil
代替。如果要测试对象是否为非nil
值,只需简单地使用if @objectname
即可,不需要使用then
关键字。你可以在这里找到更多有关if
语法的信息:
http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Control_Structures#if
你可以通过调用 present? or blank? 方法来检查一个对象是否为 nil(空)。
@object.present?
如果项目名为空字符串或nil,则此代码将返回false。
或者你可以使用
@object.blank?
这和使用`present?`方法是相同的,只不过在结果上加了一个感叹号。如果你不喜欢使用`unless`,你可以使用它。对于空字符串或nil值,它将返回true。
#present?
和#blank?
仅在Rails中可用,而在普通的Ruby中不存在。 - user3096803nil
和访问值。@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
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"
#blank?
和#present?
有其他含义。具体而言,如果对象响应#empty?
,它们将检查它是否为空。如果您转到http://api.rubyonrails.org/并搜索“blank?”,您将看到其定义的对象以及它的工作原理。查看Object上的定义,我们可以看到:"如果一个对象是false、空或空格字符串,则该对象为空。例如,“”、“ ”,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
if !@objectname
如果@objectname为nil,这将返回true。不应使用点操作符或空值,否则会抛出异常。
*** NoMethodError Exception: undefined method `isNil?' for nil:NilClass
一个理想的空值检查应该是这样的:
!@objectname || @objectname.nil? || @objectname.empty?
rails console
进行实时语句测试。 - Jonathanif
语句中不应该有then
。你可能还想解释一下如何填充@reviews
(如果它始终为.nil?
),以便我们能够给出更多的建议。 - Pavel Vellerempty?
,或者如上所述,使用present?
或blank?
。 - DGM