Ajax注释在Rails 3.0.3中不起作用

时间:2010-12-26 12:01:18

标签: ruby-on-rails ajax jquery

在layouts / 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 controller,destroy方法如下:

  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

当我点击此链接时,我会弹出一个框,说“你确定吗?”。我点击确定。我在/ views / comments中有一个destroy.js.erb文件。在这个文件中,我有:

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

评论已删除,但不会通过ajax删除。看来,link_to进入了注释控制器,破坏方法。但是回应respond.html而不是respond.js。因此,为什么我没有得到警报('内部destroy.js.erb');

当我还在使用Rails 3.0.0时,这一切都工作正常,直到我决定升级:

  • to Rails 3.0.3,
  • 从查询1.4.0到1.4.4(http://jquery.com/),
  • 并更新最新的rails.js(https://github.com/rails/jquery-ujs)

为什么不调用format.js?为什么Rails仍然试图调用format.html?

1 个答案:

答案 0 :(得分:2)

如果您查看link_to生成的实际链接,您会发现即使您使用ajax发送删除请求,您仍然会向/song/:song_id/comment/:comment_id发送请求。因为没有格式,Rails将默认为.html

为确保请求的格式正确,您可以在link_to中添加: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