Ruby on rails,多次检查nil属性

Phi*_*lip 6 attributes ruby-on-rails ruby-on-rails-4

我正在尝试检查nil的多个属性,我发现这篇文章简化了......但我没有得到我想要的结果.我有一个用户,如果需要,我想更新他们的个人资料.但是,该用户拥有我想要的所有数据.

  @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
Run Code Online (Sandbox Code Playgroud)

当所有其他尝试的单个实例都以false响应时,为什么它在此处响应为true?

MrY*_*iji 9

你是链接的.try(),在以下后失败try(:age_id):

  • 它试图调用age_id@user对象
  • 如果@user.nil?#=>返回nil
  • 如果@user.age_id != nil#=>返回一个Fixnum
  • 然后你try(:customer)在Fixnum上调用方法,这显然会失败#=>返回nil

等等

IRB控制台的一个例子:

1.9.3p448 :049 > nil.try(:nothing).try(:whatever).try(:try_this_also).nil?
 => true 
Run Code Online (Sandbox Code Playgroud)

如果要测试所有这些属性都不是nil,请使用以下命令:

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
Run Code Online (Sandbox Code Playgroud)

  • 另一种选择是'%w(age_id客户国家).all?{| attr | @user [ATTR] .present?}` (20认同)