Как составить разные представления json jbuilder?

Скажем, у меня есть модели Library и Book в Rails 4.

У меня также есть файл book.json.jbuilder, который определяет, как книга должна отображаться в json.

Как я могу указать library.json.jbuilder повторно использовать book.json.jbuilder для рендеринга книги json вместо дублирования кода?

#library.json.jbuilder example
json.(@libraries) do |library|
    json.id library.id
    json.name library.name
    # instead of the line below, is it possible to tell jbuilder 
    # to render books using book.json.jbuilder?
    json.books library.books, :title, :author 
end

person vrepsys    schedule 31.12.2013    source источник


Ответы (1)


Этого можно добиться с помощью партиалов.

См. пример ниже с _book.json.jbuilder и партиалами _library.json.jbuilder.

Дополнительная документация здесь: https://github.com/rails/jbuilder

# books/_book.json.jbuilder
json.id book.id
json.title book.title
json.author book.author

# books/index.json.jbuilder
json.array! @books, partial: 'books/book', as: :book

# libraries/_library.json.jbuilder
json.id library.id
json.title library.name
json.books library.books, partial: 'books/book', as: :book

# libraries/index.json.jbuilder
json.array! @libraries, partial: 'libraries/library', as: :library
person vrepsys    schedule 13.01.2014