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