Ruby on rails,多次检查nil属性

时间:2013-12-16 22:10:49

标签: ruby-on-rails attributes ruby-on-rails-4

我正在尝试检查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响应时,为什么它在此处响应为真?

1 个答案:

答案 0 :(得分:9)

您正在链接.try(),该try(:age_id)age_id

之后失败
  • 它尝试在@user对象
  • 上调用@user.nil?
  • 如果nil#=>返回@user.age_id != nil
  • 如果Fixnum#=>返回try(:customer)
  • 然后你在Fixnum上调用方法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}}