2013-12-16 25 views
5

Ben nil için birden fazla nitelikleri kontrol etmeye çalışıyorum, bu yazıyı buldum simplify... ama ben istediğim sonuçları alamıyorum. Gerekirse profilini güncellemek istediğim bir kullanıcım var. Ancak bu kullanıcı istediğim tüm verilere sahip.Ruby on rails, nil öznitelikleri için birden fazla denetim

@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 

Tüm diğer tek örnek örnekleri hatalı olarak yanıt verdiğinde neden buradaki doğru yanıt veriyor?

cevap

9

Sen başarısız olan .try() zincirleme sonra try(:age_id):

Bu @user.nil? # => nil
  • eğer @user.age_id != nil # => döner döner
  • eğer @user nesne üzerinde age_id aramaya çalıştığında
    • Ardından, bir Fixnum üzerinde try(:customer) yöntemini çağıracaksınız. ns nil

    vb

    IRB konsoldan bir örnek: Eğer bu özelliklerin hepsi sıfır olmadığını test etmek isterseniz

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

    , bunu kullanın:

    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

    Başka bir seçenek '% w (age_id müşteri ülke) .all? {| attr | @user [attr] .present? } ' –