2013-12-16 11 views
5

複数の属性をnilにチェックしようとしていますが、私はこの投稿を見つけました。simplify...ですが、結果が得られません。私は必要に応じて自分のプロフィールを更新したいユーザーがいます。しかし、このユーザーは私が必要とするすべてのデータを持っています。Ruby on Rails、複数の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 

他のすべての試行のインスタンスがfalseで応答すると、ここで本当に応答していますか?あなたはtry(:age_id)後に失敗し.try()を、チェーニングされている

答えて

9

  • それは、@user.age_id != nil#=>返された場合はnil
  • を返す場合@user.nil?#=>@userオブジェクト
  • age_idを呼び出そうとしa Fixnum
  • 次に、fixnumのメソッドtry(:customer)を呼び出すと、明らかに#=> returに失敗しますNS nil

など

IRBコンソールから例:あなたはこれらの属性のすべてがゼロでないことをテストする場合

1.9.3p448 :049 > nil.try(:nothing).try(:whatever).try(:try_this_also).nil? 
=> true 

、これを使用します。

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 
+14

もう一つのオプションは '%w(age_id customer country).allですか? {| attr | @user [attr] .present? } ' –

関連する問題