2014-08-27 66 views
5

使用JBuilder時,如何從輸出中完全刪除空數組元素的證據?對於此代碼示例,假設我們有三個用戶和第三用戶具有nil地址:如何使用JBuilder從陣列中完全刪除空元素

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

產生的JSON是:

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

看到到底有沒有,去年,空{}。所以任何時候塊傳遞給array!返回nil我最終在數組中的空元素,而不是缺乏元素。有沒有簡單的方法告訴JBuilder不要輸出這些內容?或者,我只需要將array!的輸出視爲普通ol陣列,然後將compactreject元素作爲我不想要的元素?

回答

2

我覺得你可以先在用戶使用reject避免你的使用情況,只有合法用戶添加到陣列:

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

是的,我完全可以這樣做,這就是我現在正在處理的問題。無論如何,我當然不應該有這個邏輯。 ;)但是,我只是想知道,如果/當這種情況確實發生,如果有'陣列!'來處理這種情況對我來說... – 2014-08-27 17:30:11

0

也許你可以試試select代替each,它會返回一個只爲非零元素的值

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

我不擔心用戶在這種情況下零,只是其屬性之一。你是對的,我不想包含零用戶,但我看到的行爲是,如果塊本身返回零(在這種情況下,當user.address爲零),那麼我得到一個空的{}而不是在所有。 – 2014-09-11 20:12:31