2014-08-27 36 views
5

JBuilder kullanırken, boş bir dizi elemanının çıktısını çıktısından nasıl tamamen kaldırabilirim? Bu kod örneği için, üç kullanıcıya sahip olduğunu varsayalım ve üçüncü kullanıcı nil adresi vardır:JBuilder ile bir dizideki boş bir öğe tamamen nasıl kaldırılır

json.array! @users.each do |user| 
    unless user.address.nil? 
    json.name user.name 
    json.address user.address 
    end 
end 

çıkan JSON geçerli:

[ 
    { 
    "name":"Rob", 
    "address":"123 Anywhere St." 
    }, 
    { 
    "name":"Jack", 
    "address":"123 Anywhere St." 
    }, 
    {} 
] 

orada sonunda o son boş {} bakınız. Bu nedenle, blok array!'a iletilen zaman nil döndürdüğünde, eleman eksikliğinden ziyade dizide boş bir öğe ile sonuçlanır. JBuilder'a bunları vermemesi için kolay bir yolu var mı? Ya da sadece array! çıktısını düz ol 'dizisi ve sonra istemediğim compact veya reject öğeleri olarak ele almam gerekiyor mu?

cevap

2

Ben öncelikle kullanıcılar reject kullanarak kullanım durumunda önlemek ve sadece diziye geçerli kullanıcı ekleyebilirsiniz düşünüyorum:

json.array! @users.reject { |user| user.address.nil? }.each do |user| 
    json.name user.name 
    json.address user.address 
end 
+0

Evet, bunu yapabilirim, şu anda sorunu nasıl ele alıyorum. Ve elbette bu mantığı da yine de görmemeliydim. ;) Ama sadece merak ettim ki, bu durum benim için ele almak için bir dizi için bir dizi olsaydı eğer bu durum ortaya çıktığında ... –

0

Belki yerine each ait select deneyebilirsiniz, bir döner Sadece nil olmayan elemanlar için değer

+0

Sadece bu durumda sıfır olma konusunda endişelenmiyorum özelliklerinden biri. Haklısınız, nil kullanıcılarını dahil etmek istemem, ancak şu an gördüğüm davranış, eğer blokun kendisi nil döndürürse (bu durumda user.address öğesinin sıfır olması durumunda) o zaman hiçbir şey yerine boş bir {} alırım hiç –

İlgili konular