AbstractController :: DoubleRenderError不应该

时间:2011-03-24 06:22:08

标签: ruby-on-rails ruby-on-rails-3 internal-server-error respond-to

当我在用户控制器中点击此destroy方法时,我一直收到以下错误。

  

AbstractController :: DoubleRenderError(在此操作中多次调用渲染和/或重定向。   请注意,您可能只是   调用渲染或重定向,每次操作最多一次。另请注意   既不重定向也不渲染终止执行动作,所以如果   你想在重定向后退出一个动作,你需要做点什么   比如“redirect_to(...)并返回”。):

这是一个奇怪的,因为老实说,我只是回应了一次电话。

这是我的行动:

def destroy
  user = User.find(params[:id])
  if user.has_role_for? current_client

    # then we remove the role
    user.has_no_roles_for! current_client

    # was that the users only role?
    if user.roles.count == 0
      user.destroy
    end

    respond_with head :ok
  else
    respond_with({:error=>'unauthorised'}, :status => :forbidden)
  end
end

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

尝试在respond_with行后添加“并返回”:

respond_with head :ok and return 

respond_with({:error=>'unauthorised'}, :status => :forbidden) and return

答案 1 :(得分:5)

head(:ok)不会返回respond_with的内容。 head :ok渲染200没有身体。 respond_with通过响应者呈现您传递给它的对象的一些表示。 head调用renderrespond_with调用render,因此出现双重渲染错误。

您应该将该行更改为head :ok