msn email google-talk twitter tumblr flickr

巧用redirect_to :back

rails中常用到redirect_to :back.主要用在处理由多个页面发出的request的返回行为. 然而本质上的 redirect_to :back 只不过是

   1  redirect_to(request.env["HTTP_REFERER"])

的快捷写法.内部实现如下:

   1      when :back
   2        if referer = request.headers["Referer"]
   3          redirect_to(referer, :status=>status)
   4        else
   5          raise RedirectBackError
   6        end
   7      else
   8      ...

那就是说redirect_to :back等同于redirect_to(request.env[“HTTP_REFERER”]).

明白了这个原理,就让我们利用它做些现实的事.

考虑一种情况,用户在进行某项操作时由于没有权限被转向登录界面,当用户成功登录后应该返回刚才进行操作的页面.

比较常见的做法就是url带参数,登录转向参数的地址,做法没有问题,只是不够清洁,也多少要写上几行的代码实现.考虑下将request.env[“HTTP_REFERER”]转存到session中,这样url就清爽了,实现也简单:

   1  session[:last_request_page] = request.env["HTTP_REFERER"] || what_ever_url
   2  
   3  <% if session[:last_request_page] %>
   4    <%= link_to "back to the page before login",session[:last_request_page]%>
   5  <% end %>
   6  or
   7  redirect_to session[:last_request_page]

嗯,不错.再想想还能干啥用呢?