Обновление рельсов с 3 до 3.1 - запросы ajax не работают
Изначально мне нужно было установить ajax beforeSend, чтобы включить метатеги csrf для всех запросов постов ajax (сеанс сбрасывался, большая боль и т. Д.). Полученные почтовые запросы работают нормально. Однако это похоже на то, о чем нужно было позаботиться в последней версии jquery-rails. Мне кажется, что я что-то пропустил, когда обновлялся... и да, я включил метатег csrf в свой макет.
Теперь моя проблема - link_to:remote. Мои ссылки генерируют правильный HTML:
<%=link_to( "important", "/questions/importance?qid=#{q.id}&imp=up",
:method=>"post",:remote=>true)%>
генерирует:
<a rel="nofollow" data-remote="true" data-method="post"
href="/questions/importance?qid=30&imp=up">important</a>
Однако при щелчке запрос является запросом GET и не является запросом xhr / не использует мои обработчики js. Это работало нормально перед обновлением до 3.1.3 с 3.0.7
Запрос, который генерируется:
Started GET "/questions/importance?qid=30&imp=up" for 127.0.0.1 at 2012-01-30 11:41:36 -0500
Creating scope :page. Overwriting existing method Question.page.
Processing by QuestionsController#importance as HTML
Parameters: {"qid"=>"30", "imp"=>"up"}
Вот соответствующие части моего макета:
<%= javascript_include_tag 'application' %>
<%= csrf_meta_tag %>
<%= yield :javascript %>
<script type="text/javascript">
$(document).ajaxSend(function(e, xhr, options) {
var token = $("meta[name='csrf-token']").attr("content");
xhr.setRequestHeader("X-CSRF-Token", token);
});
</script>
Любое понимание этого? Я что-то пропустил при обновлении?
application.js:
//= require jquery
//= require jquery-ui
//= require jquery.purr
//= require best_in_place
//= require fancybox
//= require_tree .
включаемые файлы javascript (через источник страницы):
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.purr.js?body=1" type="text/javascript"></script>
<script src="/assets/best_in_place.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.fancybox.js?body=1" type="text/javascript"></script>
<script src="/assets/fancybox.js?body=1" type="text/javascript"></script>
<script src="/assets/autocomplete-rails.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-alert.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.fancybox-1.3.4.pack.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.validate.min.js?body=1" type="text/javascript"></script>
<script src="/assets/validators.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
<meta content="authenticity_token" name="csrf-param" />
<meta content="26P9UWaXFsZBE6jfjkQv00GgS+7+XmOOPxlh55liz4Q=" name="csrf-token" />
1 ответ
Тебе нужно jquery_ujs
для атрибутов метода данных рельсы создаются для фактического использования. Предполагая, что в вашем приложении есть гем jquery_ujs, добавьте
//= require jquery_ujs
В application.js (после загрузки jquery) должны все исправить