Как сделать коллекцию в jbuilder?

В Rails есть отличный метод рендеринга набора объектов для шаблонов представлений, и он работает как единомышленники:

<%= render @restaurants %>

Он автоматически ищет партиал с именем _restaurant.html.erb, перебирает коллекцию, передает отдельный объект партиалу и визуализирует его. Это довольно фантастично.

Теперь я ищу очень похожий способ в jbuilder gem.

_restaurant.json.jbuilder

json.(restaurant, :id, :name, :address, :latitude, :longitude)

Теперь, что касается @restaurants, как мне использовать этот партиал так же, как он работает в Rails для шаблонов представлений? На данный момент я визуализирую коллекцию следующим образом:

json.restaurants @restaurants do |restaurant|
  json.partial! restaurant
end

person Arslan Ali    schedule 30.07.2016    source источник
comment
Посмотрите, что DHH комментарий :p   -  person Arup Rakshit    schedule 30.07.2016
comment
Но json.partial! "restaurant", :collection => @restaurants тоже хорош.   -  person Arup Rakshit    schedule 30.07.2016
comment
@ArupRakshit Опубликуйте свой второй комментарий в качестве ответа.   -  person Arslan Ali    schedule 31.07.2016


Ответы (2)


Итак, я думаю, вы ищете следующее:

json.partial! :restaurant, collection: @restaurants
person Arup Rakshit    schedule 30.07.2016
comment
Интересно, как это может быть правильным ответом? Это только рендеринг одного ресторана, не так ли? - person kangkyu; 29.05.2019
comment
Я согласен. Это не может быть правильным ответом, так как таким образом будет отображаться только один ресторан. - person Repolês; 13.02.2020
comment
@Repolês @kangkyu Нет, он не будет отображать только один, посмотрите, как collection:< /а> работает. - person Arup Rakshit; 14.02.2020
comment
Привет, @ArupRakshit. Это не работает для меня, правда. В журнале Rails действительно указано, что Rendered collection of ..., но результирующий JSON включает только первый элемент коллекции. Это странно, и я не знаю, ошибка ли это в моей версии Rails или что-то, что я делаю неправильно. Я могу вывести коллекцию только тогда, когда использую json.array!. - person Repolês; 15.02.2020

Самое короткое что смог найти:

json.restaurants @restaurants, partial: 'restaurants/restaurant', as: :restaurant

... но на самом деле это не похоже на рендеринг набора частичных представлений (в журналах он по-прежнему отображается как несколько рендеров), и мне не нравится использовать слово «ресторан» 5 раз в строке кода

person loop    schedule 07.02.2020