首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails,def destroy,没有响应destroy.js.erb,为什么?

Rails,def destroy,没有响应destroy.js.erb,为什么?
EN

Stack Overflow用户
提问于 2011-04-23 13:24:12
回答 3查看 3.5K关注 0票数 5

Rails、def destroy和destroy.js.erb未响应

下面是我的方法:

代码语言:javascript
复制
  # DELETE /Groups/1
  # DELETE /Groups/1.xml
  def destroy

    @group = Group.find(params[:id])
    @group.destroy

    respond_to do |format|
      format.js
    end
  end

在视图中,我有:

代码语言:javascript
复制
<a href="/groups/122" data-confirm="Are you sure?" data-method="delete" rel="nofollow" >Delete</a>

但是,在删除时,日志显示:

S

代码语言:javascript
复制
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。你知道为什么吗?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-23 16:39:14

好的,这里有几个问题:

第一,

代码语言:javascript
复制
<a href="/groups/122" data-confirm="Are you sure?" data-method="delete" rel="nofollow" >Delete</a> 

此链接不是远程链接,您可以在您提供的日志中看到它:

代码语言:javascript
复制
Processing by GroupsController#destroy as HTML

要让你的链接提交一个ajax请求,添加:remote => true (和你已经做的一样:确认=>‘你确定吗?’和:方法=>:销毁)

其次,在使用javascript进行响应时,您应该禁用布局渲染。

因此,您的操作可能如下所示:

代码语言:javascript
复制
  respond_to do |format|
      format.js { render :template => 'groups/destroy.js.erb', :layout => false }
  end

为了方便起见,我在我的contoller中添加了以下内容:

代码语言:javascript
复制
layout Proc.new { |controller| controller.request.xhr?? false : 'application' }

因此,如果请求是xhr类型,则不会呈现布局。然后,您可以让您的操作保持原样,它应该可以工作

票数 6
EN

Stack Overflow用户

发布于 2011-04-23 13:45:45

您是否安装了jquery-rails gem?,并验证您是否具有:

csrf_meta_tag

javascript_include_tag :默认

在布局中

P.S似乎是你的控制器无法响应js格式,你也可以尝试添加

控制器的类中的respond_to :html,:js,如下所示:

代码语言:javascript
复制
class MyController < ActionController
  respond_to :html, :js
  ....
  def destroy
  ...
  end
end

如果对你有帮助,请让我知道

票数 0
EN

Stack Overflow用户

发布于 2011-04-23 15:13:04

检查本机rails helper的输出中是否有删除链接,它返回的内容如下

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5762374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档