Rails响应已删除资源的行为?

时间:2012-08-06 03:00:01

标签: ruby-on-rails-3

我在Rails 3中使用respond_to和respond_with对来响应DELETE #destroy请求。 destroy操作在UsersController中定义。它会销毁params[:id]指定的用户并使用JS模板进行响应。但是,请求在RSpec测试中仍然失败,我不确定如何解决它。

这是我的UsersController的一个片段:

class UsersController < ApplicationController
  respond_to :html, only: [:index, :show, :new, :edit]
  respond_to :js, only: [:create, :update, :delete]
  ...

  def destroy
    @user = User.find(params[:id])
    @user.destroy

    respond_with @user
  end
end

以下是持续失败的测试:

require 'spec_helper'

describe UsersController do
  ...

  describe "DELETE #destroy" do
    before { @user = create(:user); delete :destroy, id: @user.id, format: :js }

    it "return HTTP success" do
      response.should be_success
    end

    it "respond with JS content" do
      response.content_type.should == 'text/javascript'
    end
  end
end

测试“用JS内容响应”确实成功,但测试“返回HTTP成功”失败。当我使用调试器检查response.code时,它是406.由于删除成功,我期待2xx。这是正常的Rails行为还是我的代码有问题?

1 个答案:

答案 0 :(得分:1)

似乎搞砸了REST delete和控制器的destroy。 Rails响应者一无所知:删除操作,更改

respond_to :js, only: [:create, :update, :delete]

respond_to :js, only: [:create, :update, :destroy]

或将块传递给响应者,而不是

respond_with @user

使用

respond_with @user do |format|
 format.js
end