Частичный кэш Jbuilder не добавлен в вывод - PullRequest
0 голосов
/ 03 февраля 2020

Я выполняю задачу по созданию кэша для большого вывода json с помощью jbuilder. Кеш заполняется, и я могу вывести его в журнал с помощью put, но как я могу добавить его в файл json, возвращаемый основным шаблоном jbuilder?

Я предварительно разогреваю свой кеш, как this:

task update_cache: :environment do
  @jobs = Job.where(archived: false).where(assignee_id: 262).each do |job|
    puts "job: #{job.id}"
    job.workspans.each do |workspan|
      json = ApplicationController.new.render_to_string(
        template: 'api/jobs/_workspan',
        locals: { :workspan => workspan }
      )      
      Rails.cache.write("workspan-#{workspan.id}", json)
    end
  end
end

И извлекаем его вот так

json.jobs @jobs do |job|
  json.job  do
    json.(job, *Job.column_names)
    json.circuit { json.(job.circuit, *Circuit.column_names) }
    json.workspans(job.ordered_workspans) do |workspan|                    
      Rails.cache.fetch("workspan-#{workspan.id}") do
        render json.partial! 'workspan', workspan: workspan
      end
    end
  end
end

Узел рабочих областей неправильно возвращается как []

1 Ответ

0 голосов
/ 05 февраля 2020

В задаче потребовалось два изменения: сохранить как json, а не строку, и изменить ключ кеша

Rails.cache.write("jbuilder/views/workspan-#{workspan.id}", JSON.parse(json_string))

, что позволило шаблону jBuidler извлекать и включать кешированный json в нормальное имя строителя. Записка без дайджеста.

json.cache! "workspan-#{workspan.id}",  skip_digest: true do
   json.partial! 'workspan', workspan: workspan
end
...