在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时,这一切都工作正常,直到我决定升级:
为什么不调用format.js?为什么Rails仍然试图调用format.html?
答案 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