Комментарии Ajax не работают в Rails 3.0.3 - PullRequest
1 голос
/ 26 декабря 2010

В раскладках / application.html.erb. У меня есть:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
  <title>Some title</title>
  <%= stylesheet_link_tag 'application' %>
  <%= stylesheet_link_tag 'blueprint/print', 'media' => 'print' %>
  <%= javascript_include_tag 'jquery', 'jquery-ui-1.8.2.custom', 'jquery.colorbox-min', 'jquery.corner', 'jquery.countdown.min', 'jquery.uploadFileThis',
    'jquery.ui.core', 'jquery.ui.mouse', 'jquery.ui.position', 'jquery.ui.slider', 'jquery.ui.widget', 'jquery.ui.datepicker',
    'ajaxupload', 'jwplayer', 'swfobject', 'flowplayer-3.2.4.min', 'rails', 
    'application', :cache => true %>
  <%= csrf_meta_tag %>
</head>
<body>
.....

На мой взгляд, у меня есть:

<%= link_to 'delete', song_comment_path(comment.media, comment), :confirm => 'Are you sure?', :method => :delete, :remote => true %>

Контроллер My Comments, метод уничтожения выглядит так:

  def destroy
    @comment = Comment.find(params[:id])
    @comment.destroy

    respond_to do |format|
      format.html { redirect_to(root_path) }
      format.xml  { head :ok }
      format.js   {  }
    end
  end

Когда я нажимаю эту ссылку, я получаю всплывающее окно с надписью «Вы уверены?». Я нажимаю ОК. У меня есть файл destroy.js.erb в / views / comments. Внутри этого файла у меня есть:

alert('Inside destroy.js.erb');
// and some code to hide the comment element

Комментарий удален, но не через ajax. Кажется, ссылка комментирует в контроллере комментария метод уничтожения. Но отвечает response.html, а не response.js. Поэтому я не получаю предупреждение («Внутри destroy.js.erb»);

Все это работало нормально, когда я все еще использовал Rails 3.0.0, пока я не решил обновить:

Почему не вызывается format.js? Почему Rails все еще пытается вызвать format.html?

1 Ответ

2 голосов
/ 26 декабря 2010

Если вы посмотрите на фактическую ссылку, сгенерированную link_to, вы обнаружите, что даже если вы используете ajax для отправки запроса на удаление, вы все равно отправляете запрос на /song/:song_id/comment/:comment_id. Поскольку формата нет, Rails по умолчанию будет .html.

Чтобы убедиться, что запрос идет в нужном формате, вы можете добавить опцию :format к вашей ссылке:

<%= link_to 'delete', song_comment_path(comment.media, comment, :format => :js), :confirm => 'Are you sure?', :method => :delete, :remote => true %>

Теперь это должно дать вам такую ​​ссылку: /song/:song_id/comment/:comment_id.js

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