#javascript #ruby-on-rails #json #caching
#javascript #ruby-on-rails #json #кэширование
Вопрос:
Я не понимаю, как использовать json в моем приложении rails (2.3.5). Это те элементы, которые мне нужны:
- html шаблон
- данные json
- 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