2013-08-13 4 views
1

В rabl Я пытаюсь иметь ребенка, чьи элементы являются условными, но в тех случаях, когда условие оценивает false, оно все равно отображает элементы, которые не имеют атрибутов.Удаление пустых хэшей в Rabl

Вот мой .rabl:

child(:products) do 
    attribute :id, :if => lambda{ |p| p.store_id == @store.id } 
end 

Надеясь .json, который выглядит примерно так:

"products":[{"id":2}] 

Но это рендеринг пустые значения, а также:

"products":[{}, {"id":2}, {}] 

Есть ли способ, который я могу сделать так, чтобы пустые элементы полностью игнорировались?

ответ

3

Предполагая, что вы ожидаете метод products на переменную экземпляра:

child(@catalogue.products.select{|p| p.store_id == @store.id} => :products) do 
    attribute :id 
end 
0

Хмммм. U может сделать это.

[{},{a: "b"},{}].reject {|h| h.blank?} 
+0

Я не могу на самом деле манипулировать ' "продукты": [{}, { "ID": 2}, {} ] 'это просто JSON, который rabl является рендерингом. –

+0

Хммм. Я не пробовал rabl. Однако U может попытаться это сделать. Это квест. Просто попробуйте поставить 'end.reject {| h | h.blank?} 'после« do end ». Обычно он должен делать Trick. –

Смежные вопросы