新手问题 请教 Rails 如何取得浏览器显示的 url 而不是 request 的 URL?

youclavier · 2015年09月10日 · 最后由 youclavier 回复于 2015年09月14日 · 3445 次阅读

请教 Rails 如何取得浏览器显示的 url 而不是 request 的 URL?

或者如何取得上一次的 request URL? Development 环境用的是 Webrick 服务器,用 URI(request.referer).path 或者 request.env["HTTP_REFERER"] 取得 url 还是最后一次的 request url,不知道是不是 Webrick 的问题?

request.original_url

取浏览器显示的 URL 要从浏览器取,用 JavaScript 拿。 Referrer 并不能保证一定是上一次的请求。有些特定情况下 Referrer 甚至会被浏览器屏蔽。

#1 楼 @fresh_fish 这个方法是取最后一次 request 的 url 当最后一次 request 和 浏览器的 url 不一样时 就取不到浏览器显示的 url 了

用 Turbolinks 吗? request.env["X-XHR-Referer"]

#2 楼 @msg7086 Ok 谢谢 看来还是得用 JS 拿。虽然不能保证是上一次的请求 但至少可以拿出前面的请求再来对比进行判断。

还有一种嘛,每次把请求地址塞进 Session 里。不过请求地址和浏览器 URL 是不一定相关的。

#4 楼 @rei 谢谢回复。这里没有用 Turbolinks. 用 request.env["X-XHR-Referer"] 返回 nil. 目前状况是 nav bar 上面有两个按钮跳转到不同页面,当按了特定按钮跳转到特定页面时 那个按钮要一直保持 active 状态。目前只能通过浏览器的 url 去判断在哪个页面来为按钮添加 active 的 class. 可是 request 了那个页面之后,接着会 request 另一个功能,因此导致最后一次 request 的 url 和 浏览器的 url 不一样,我想这种状况应该只能通过 JS 来取 url 了~

我是这样,看下能不能帮到你

<% unless request.original_fullpath == admin_dashboard_path %>
   <li><%=link_to t(params[:controller].split('/').last), controller: params[:controller]%></li>
 <% end %>

感觉设计得有问题。传一个 param 确定好了。

#9 楼 @rei 是的 其实第一次的 request url 是和浏览器一样的 但是当页面 render 好之后 又发起了第二个 request 去取用户的系统通知提醒 因此 request 的 url 被改变了 所以这样的设计是不好的是吗?

#8 楼 @yeyong14 这个方法取到的还是最后一次 request 的地址和 controller 行不通~~

12 楼 已删除
youclavier 关闭了讨论。 10月29日 17:31
需要 登录 后方可回复, 如果你还没有账号请 注册新账号