0

У меня есть рельсы 3.1, и когда я использую операцию ajax для удаления, страница не показывает обновленный контент без обновления вручную.Страница не показывает обновленную информацию после вызова ajax в rails

Странно, что все коды .js.erb, похоже, срабатывают правильно. Я даже попытался поместить только простой page.alert («привет») в файле destroy.js.erb, но после удаления не получаю предупреждения. Я увидел пару мест, где они упоминают добавление тега «script» для ajax в представлении, чтобы сделать работу jquery, но ни один из последних руководств не упоминает об этом. Буду признателен за вашу помощь.

Вот что я вижу в логах сервера:

Started DELETE "/categories/35" for 127.0.0.1 at 2011-12-19 12:58:15 -0500 
    Processing by CategoriesController#destroy as JS 
    Parameters: {"id"=>"35"} 
    User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = 5 LIMIT 1 
    Category Load (0.3ms) SELECT "categories".* FROM "categories" WHERE "categories"."user_id" = 5 AND "categories"."id" = ? LIMIT 1 [["id", "35"]] 
    SQL (0.5ms) DELETE FROM "categories" WHERE "categories"."id" = ? [["id", 35]] 
Rendered categories/destroy.js.erb (0.5ms) 
Completed 200 OK in 161ms (Views: 30.7ms | ActiveRecord: 3.2ms) 

Вот что я вижу в сгенерированном HTML источника вывода страницы страницы:

... 
<tr id = "category_35"> 
    <td>High-end products</td> 
    <td class="deletebutton"><a href="/categories/35" data-confirm="Are you sure?" data-method="delete" data-remote="true" rel="nofollow">Delete</a></td> 
    </tr> 

<tr id = "category_36"> 
    <td>Economy products</td> 
    <td class="deletebutton"><a href="/categories/36" data-confirm="Are you sure?" data-method="delete" data-remote="true" rel="nofollow">Delete</a></td> 
    </tr> 

Содержание destroy.js.erb :

('#<%= dom_id(@category) %>').fadeOut(700); 

В Gemfile:

gem 'jquery-rails' 

В categories_controller.rb:

def index 
     @categories = current_user.categories.all 
    respond_to do |format| 
     format.html # index.html.erb 
     format.json 
     format.js 
    end 
    end 

    def destroy 
     @category.destroy 

    respond_to do |format| 
     format.html { redirect_to categories_url } 
     format.js { 
      render :template => 'categories/destroy.js.erb', :layout => false 
     } 
    end 
    end 

В приложение/просмотров/категории/index.html.erb

<h2>Categories</h2> 
<table name="categories_list"> 
<%= render "categories_list" %> 
</table>  
<br /> 

В парциального _categories_list.html.erb

<% @categories.each do |category| %> 
    <tr id = "<%= dom_id(category)%>"> 
    <td><%= category.name %></td> 

    <td class="deletebutton"><%= link_to 'Delete', category, confirm: 'Are you sure?', method: :delete, :remote => true %></td> 
    </tr> 
<% end %> 
+0

Как выглядит ваш вызов ajax? – Rafay

+0

Я не указал никакого отдельного кода вызова ajax. Я использую ненавязчивый метод. Как вы можете видеть, я положил: remote => true на кнопку удаления. Это помогает? – Tabrez

+0

@ 3nigma, мне нужно добавить какой-либо установочный код в application.js? Я вижу несколько старых руководств, в которых упоминается установка ajax, но нам нужно, чтобы с последними рельсами 3.1? – Tabrez

ответ

1

Хорошо, на всякий случай кто-то спотыкается на этот вопрос, я хотел бы поделиться решением. Существовало около 3 важных вещей:

  1. Не найден знак $ destroy.js.erb. Вот скорректированный код:

    $ ('# <% = dom_id (@category)%>'). FadeOut (700);

  2. Кроме того, диспетчеру необходимо дать указание НЕ использовать макеты по умолчанию при ответе на .js. Это можно сделать в самом контроллере. Но я сделал это в контроллере категории следующим образом:

    reply_to do | формат | format.html {redirect_to categories_url} format.json format.js {делают "уничтожить",: макет => ложь}

  3. Кроме того, в одной точке во время итерации я спутал format.json с форматом. JS. Это две разные вещи! Поскольку я новичок в RoR, я думал, что ответ на вызовы ajax будет json и format.json аналогичен формату. JS.

Наконец, я должен дать крик к Марку, который поделился с АЯКС демо на GitHub по адресу: https://github.com/markusproske/ajax_demo/tree/jquery

Дополнительное изменение я должен был сделать, чтобы заставить его работать для меня было отключение макета цветопередача. В противном случае эта демонстрация будет тщательной. Я все еще смотрю на обработку условий ошибок для js-вызовов.

Смежные вопросы