Rails、def destroy和destroy.js.erb未响应
下面是我的方法:
# DELETE /Groups/1
# DELETE /Groups/1.xml
def destroy
@group = Group.find(params[:id])
@group.destroy
respond_to do |format|
format.js
end
end在视图中,我有:
<a href="/groups/122" data-confirm="Are you sure?" data-method="delete" rel="nofollow" >Delete</a>但是,在删除时,日志显示:
S
tarted POST "/groups/128" for 127.0.0.1 at Fri Apr 22 22:21:31 -0700 2011
Processing by GroupsController#destroy as HTML
Parameters: {"authenticity_token"=>"J+A2DN87qoigNxw97oK6NWqPQvXt7KAwLMAM7Er/eWM=", "id"=>"128"}
.....
Completed 406 Not Acceptable in 372ms永远不会调用destory.js.erb。你知道为什么吗?谢谢
发布于 2011-04-23 16:39:14
好的,这里有几个问题:
第一,
<a href="/groups/122" data-confirm="Are you sure?" data-method="delete" rel="nofollow" >Delete</a> 此链接不是远程链接,您可以在您提供的日志中看到它:
Processing by GroupsController#destroy as HTML要让你的链接提交一个ajax请求,添加:remote => true (和你已经做的一样:确认=>‘你确定吗?’和:方法=>:销毁)
其次,在使用javascript进行响应时,您应该禁用布局渲染。
因此,您的操作可能如下所示:
respond_to do |format|
format.js { render :template => 'groups/destroy.js.erb', :layout => false }
end为了方便起见,我在我的contoller中添加了以下内容:
layout Proc.new { |controller| controller.request.xhr?? false : 'application' }因此,如果请求是xhr类型,则不会呈现布局。然后,您可以让您的操作保持原样,它应该可以工作
发布于 2011-04-23 13:45:45
您是否安装了jquery-rails gem?,并验证您是否具有:
csrf_meta_tag
javascript_include_tag :默认
在布局中
P.S似乎是你的控制器无法响应js格式,你也可以尝试添加
控制器的类中的respond_to :html,:js,如下所示:
class MyController < ActionController
respond_to :html, :js
....
def destroy
...
end
end如果对你有帮助,请让我知道
发布于 2011-04-23 15:13:04
检查本机rails helper的输出中是否有删除链接,它返回的内容如下
<a onclick="if (confirm('Are you sure?'))
{ var f = document.createElement('form');
f.style.display = 'none';
this.parentNode.appendChild(f);
f.method = 'POST';
f.action = this.href;
var m = document.createElement('input');
m.setAttribute('type', 'hidden');
m.setAttribute('name', '_method');
m.setAttribute('value', 'delete');
f.appendChild(m);
var s = document.createElement('input');
s.setAttribute('type', 'hidden');
s.setAttribute('name', 'authenticity_token');
s.setAttribute('value', 'GAsTX1/XJAAoXBxJuE28EPW9jraQd5N39WeeuvakLWA=');
f.appendChild(s);
f.submit(); };
return false;"
href="/categories/1">Destroy</a>https://stackoverflow.com/questions/5762374
复制相似问题