2014-08-27 20 views
5

Podczas korzystania z JBuilder, w jaki sposób mogę całkowicie usunąć dowody pustego elementu tablicy z moich danych wyjściowych? Dla tej próbki kodu, załóżmy, że mamy trzech użytkowników, a trzeci użytkownik ma nil adres:Jak całkowicie usunąć pusty element z tablicy przy użyciu JBuilder

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

Powstały JSON jest:

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

Zobacz ten ostatni, pusty {} na koniec. Tak więc za każdym razem, gdy blok przechodzi do array! zwraca nil, kończę z pustym elementem w tablicy, zamiast z brakiem elementu. Czy jest jakiś łatwy sposób, aby powiedzieć JBuilderowi, żeby tego nie robił? Czy muszę po prostu traktować wyjście array! jako zwykłą tablicę, a następnie compact lub elementów, których nie chcę?

Odpowiedz

2

myślę, że można uniknąć przypadku użycia przez pierwszy używając reject na użytkowników, a jedynie dodać poprawne użytkowników do tablicy:

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

Tak, mogę to całkowicie zrobić, tak jak teraz radzę sobie z problemem. I oczywiście nie powinienem mieć takiej logiki w widoku. ;) Ale zastanawiałem się tylko, czy/gdy pojawi się taka sytuacja, jeśli istnieje sposób na 'tablicę!' Do obsługi tego przypadku dla mnie ... –

0

Może spróbować select zamiast each, to zwróci wartość tylko dla elementów niezerowych

json.array! @users.select do |user| 
    unless user.address.nil? 
    json.name user.name 
    json.address user.address 
    end 
end 
+0

Nie martwię się o to, że użytkownik jest zerowy w tym przypadku, po prostu jedna z jego właściwości. Masz rację, nie chciałbym włączać zero użytkowników, ale zachowanie, które widzę, polega na tym, że jeśli sam blok zwróci zero (w tym przypadku gdy user.address jest zerowy), otrzymuję pustą {} zamiast niczego w ogóle. –

Powiązane problemy