Как кэшировать JSON в ruby on rails?

#javascript #ruby-on-rails #json #caching

#javascript #ruby-on-rails #json #кэширование

Вопрос:

Я не понимаю, как использовать json в моем приложении rails (2.3.5). Это те элементы, которые мне нужны:

  1. html шаблон
  2. данные json
  3. javascript для отображения данных в шаблоне (я использую ЧИСТЫЙ)

данные json, вычисляемые с использованием вспомогательных методов (rails и моих собственных), довольно большие и меняются не часто (в основном это нижний колонтитул, верхний колонтитул и некоторые другие части страницы), поэтому их следует кэшировать. Как правильно это сделать?

Я попробовал 3 подхода.

A.

  - html template and javascript to render data placed in the view html.erb
 - method to get json data placed in the helper
    <script type="text/javascript">
      var data= <%= helper_method %>;
    </script>
  

Проблема: как кэшировать данные json?

B.

  - html template and javascript to render data placed in the view html.erb
 - method to get json data is a controller action
     def footer
        expires_in(4.hours)
        render :json => { calculated_data }
     end
 - ajax request in javascript
      $.ajax({
        type: "GET",
        url: "<%=footer_path %>",
        success: function(data){
          render json data in html template
        }
      });
  

Проблема: второй запрос отправляется на сервер…

C.

  - html template and javascript to render data placed in the view html.erb
 - method to get json data is a controller action
     def footer
        expires_in(4.hours)
        render :json => { calculated_data }
     end
 - data in javascript
    <script type="text/javascript" src="<%=footer_path %>">
    </script>
  

Проблемы: как я могу передать результат этого скрипта переменной, которую я могу использовать в javascript, который отображает данные в шаблоне?

В случае B и C возникает необходимость включить помощники в контроллер (методы для вычисления данных json), что является довольно уродливым решением.

Каким должно быть правильное решение для этого? Какой подход подходит для этого?

Спасибо за все предложения.

Ответ №1:

Ответов нет, но я нашел решение. Для тех, у кого могла возникнуть подобная проблема, возможно, это сэкономит кому-то время…

Я использовал подход A и Rails cache. У меня есть метод в helper

 def footer
  return Rails.cache.fetch('footer', :expires_in => 4.hours){
    caluclate_data_with_other_methods.to_json
  }
end
  

Только это…

Комментарии:

1. Спасибо, что нашли время вернуться и опубликовать решение, вы герой Интернета: p