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

AnA*_*ice 5 ruby-on-rails ruby-on-rails-3

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
Run Code Online (Sandbox Code Playgroud)

在视图中我有:

<a href="/groups/122" data-confirm="Are you sure?" data-method="delete" rel="nofollow" >Delete</a>
Run Code Online (Sandbox Code Playgroud)

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

小号

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
Run Code Online (Sandbox Code Playgroud)

永远不会调用destory.js.erb.有什么想法吗?谢谢

Vla*_*ich 6

好吧,好吧,这里有几个问题:

第一,

<a href="/groups/122" data-confirm="Are you sure?" data-method="delete" rel="nofollow" >Delete</a> 
Run Code Online (Sandbox Code Playgroud)

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

Processing by GroupsController#destroy as HTML
Run Code Online (Sandbox Code Playgroud)

让你的链接提交一个ajax请求add:remote => true(就像你已经拥有的那样:confirm =>'你确定吗?'和:method =>:destroy)

第二,你应该在使用javascript响应时禁用布局渲染.

所以,你的行动可能如下:

  respond_to do |format|
      format.js { render :template => 'groups/destroy.js.erb', :layout => false }
  end
Run Code Online (Sandbox Code Playgroud)

为了更容易,我已将此添加到我的控制器:

layout Proc.new { |controller| controller.request.xhr?? false : 'application' }
Run Code Online (Sandbox Code Playgroud)

因此,如果请求是xhr类型,则不会呈现布局.然后你就可以像现在这样离开你的行动,它应该有效