Redirecionar para trás ou padrão no Rails

O que acontecerá se o usuário usuário não puder acessar um recurso em seu aplicativo? Você redireciona o usuário de volta à página anterior?

redirect_to :back

Infelizmente : back depende da variável de cabeçalho de solicitação HTTP_REFERER e, portanto, você pode ter problemas se ela não existir. Este pode ser o caso se o seu usuário estiver, por exemplo, tentando acessar o recurso com um link direto (por exemplo, um favorito ou um link de um e-mail).

Em vez disso, você deve extrair a funcionalidade de retorno e criar um método comum para redirecionamento com um substituto extra:

def redirect_to_back_or_default(default = root_url)
if request.env["HTTP_REFERER"].present? and request.env["HTTP_REFERER"] != request.env["REQUEST_URI"]
redirect_to
:back
else
redirect_to
default
end
end

E, em seguida, use-o em seus controladores em vez de semelhantes:redirect_to :back

def show
...
redirect_to_back_or_default

...
end

Agora seu usuário é redirecionado para root_url (alterável com o parâmetro padrão) se HTTP_REFERER não existir.

Você também deve se lembrar dos outros formatos e fornecer uma mensagem de erro em vez do redirecionamento:

respond_to do |format|
format
.html { redirect_to_back_or_default }
format
.json { render json:
{errors: [I18n.t("some.error.message")]}, status: 404
}
end

Veja redirect_to na documentação da API Rails