Ruby on rails 在ruby中,如何编写item.nil?无:项目编号至

Ruby on rails 在ruby中,如何编写item.nil?无:项目编号至,ruby-on-rails,ruby,Ruby On Rails,Ruby,必须有更好的方法来编写item.nil?无:item.id.to\u。有人知道吗?是的,有可能: item && item.id.to_s 例如: a = 23 a && a.to_s # => "23" a = nil a && a.to_s # => nil 您还可以执行以下操作: item.id.to_s if item 我会使用,除非: item.id.to_s unless item.nil? 如果条件为fals

必须有更好的方法来编写
item.nil?无:item.id.to\u
。有人知道吗?

是的,有可能:

   item && item.id.to_s
例如:

a = 23
a && a.to_s # => "23"
a = nil
a && a.to_s # => nil

您还可以执行以下操作:

item.id.to_s if item

我会使用
,除非

item.id.to_s unless item.nil?
如果条件为false,则此表达式的计算结果为
nil

,因为您有“RubyonRails标签”,在rails上可以执行
项。try(:id)。try(:to_s)
这里有一个例子

require 'active_support/core_ext/object/try'
class Item
  attr_accessor :id
end

item= Item.new
item.id= 42
p item.try(:id).try(:to_s)
item= nil
p item.try(:id).try(:to_s)
“42”


编辑:到目前为止不是最好的方式,请参见下面的评论

在下面的猴子补丁之后,nil.id.to_将开始返回nil

class NilClass
    def id
            self
    end
    def to_s
            self
    end
end

第三次尝试…@Gumbo是的。。的确……)如果
a
a=false
@Gumbo错误地相似,那么这可能不起作用。看着代码,我确信
是一个对象,就像上面的OP称为方法
id
一样。因此不可能出现
false
值,
nil
或真值。。当然。item是从数据库加载的RoR对象,所以我当然希望它不是错误的。也许有更好的方法来解决这个问题。你想干什么?好奇。为什么
除非
显式调用
nil?
只是更明显地说明发生了什么?@O-I希望OP也能更准确地使用它。我是一个粉丝。这很有道理,我喜欢显式的。零?如果你使用Rails,我真的很喜欢这个。仍然允许方法链接。很好,努雷廷!太棒了,我不知道
try
方法,谢谢。@kdeisz-try方法像明火净化条件(+1表示醉酒?)一样照亮了我的代码。这看起来非常危险/测试起来绝对可怕。所以nil.to_开始返回nil而不是“”?如果项目评估为false,这将不起作用,但我明白你的意思。