AbstractController :: DoubleRenderError, который не должен быть - PullRequest
3 голосов
/ 24 марта 2011

Когда я нажал этот метод уничтожения в моем пользовательском контроллере, я получил следующую ошибку.

AbstractController :: DoubleRenderError (Render и / или редирект были вызваны несколько раз в этом действии. Обратите внимание, что вы можете только вызовите render или redirect, и не более одного раза за действие. Также обратите внимание, что ни перенаправление, ни рендеринг не прекращают выполнение действия, поэтому если вы хотите выйти из действия после перенаправления, вам нужно что-то сделать например, "redirect_to (...) и return".):

Это странно, потому что я, честно говоря, отвечаю только один раз на звонок.

Вот мое действие:

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 ]

5 голосов
/ 21 апреля 2012

head(:ok) не возвращает то, что вы можете respond_with.head :ok рендерит 200 без тела.respond_with передает через респондента некоторое представление объекта, который вы передали в него.head звонки render, respond_with звонки render, следовательно, ошибка двойного рендеринга.

Вы должны изменить эту строку на head :ok.

5 голосов
/ 24 марта 2011

Попробуйте добавить «и вернуть» после строк ответа:

respond_with head :ok and return 

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