Обновление рельсов с 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&amp;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) должны все исправить

Другие вопросы по тегам