Как кешировать JSON в ruby ​​на рельсах? - PullRequest
6 голосов
/ 19 мая 2011

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

  1. html template
  2. json data
  3. javascript для отображения данных в шаблоне (я использую PURE )

Данные 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 Ответ

22 голосов
/ 30 мая 2011

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

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

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

Только это ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...