Как я могу сделать один частичный дважды в jbuilder?

Я хочу сделать шаблон jbuilder следующим образом:

json.author do
  json.partial! 'user', user: @user
end
json.owner do
  json.partial! 'user', user: @user
end

Кажется, что отбросить один частичный дважды, можно ли сделать так?

user_json = json.some_render_partial! 'user', user: @user
json.author { user_json }
json.owner { user_json }

Ответ 1

Кажется, что отбросить один частичный дважды, можно ли сделать так?

Если вы хотите минимизировать код, то да, вы можете использовать proc s.

user_json = proc { json.partial! 'user', user: @user }

json.author &user_json
json.owner &user_json

Кроме того, если ваша задача - повысить производительность, то один из способов - кешировать частичный. Попробуйте это

user_json = proc {
  json.cache! @user, expires_in: 10.minutes do
    json.partial! 'user', user: @user
  end
}

json.author &user_json
json.owner &user_json

Но иногда кеширование может быть медленнее. Поэтому имейте в виду, если он соответствует следующим критериям:

  • Частично охватывает сложные вычисления, которые в среднем дороже, чем доступ к кешу. как вызовы API-интерфейса WEB или AR-запросы

  • Размер создаваемого блоком JSON мал

Подробнее см. [Кэширование Jbuilder Rails медленнее]