我正在尝试检查nil的多个属性,我发现这篇文章simplify...但是我没有得到我想要的结果。我有一个用户,如果需要,我想更新他们的个人资料。但是,该用户拥有我想要的所有数据。
@user.try(:age_id).nil?
#returns false
@user.try(:customer).nil?
#returns false
@user.try(:country).nil?
#returns false
@user.try(:age_id).try(:customer).try(:country).nil?
#returns true
当所有其他尝试的单个实例都以false响应时,为什么它在此处响应为真?
答案 0 :(得分:9)
您正在链接.try()
,该try(:age_id)
在age_id
:
@user
对象@user.nil?
nil
#=>返回@user.age_id != nil
Fixnum
#=>返回try(:customer)
nil
,这显然会失败#=>返回1.9.3p448 :049 > nil.try(:nothing).try(:whatever).try(:try_this_also).nil?
=> true
等
IRB控制台的一个例子:
if @user.present?
if @user.age_id.presence && @user.customer.presence && @user.country.presence
# they are all present (!= nil)
else
# there is at least one attribute missing
end
end
如果要测试所有这些属性都不是nil,请使用:
{{1}}