如何构建一个有`#`的路由?

时间:2016-01-29 18:11:32

标签: ruby-on-rails angularjs ruby-on-rails-4 routes

如何在其中构建带有主题标签(#)的路线?我创建了路线

get 'authors/#/:id' => 'authors#show

但这会产生路线

GET    /authors/%23/:id(.:format)

因此%23应该是#

1 个答案:

答案 0 :(得分:7)

您不能在服务器上的URL中使用#,它会调用Fragment Identifier并且是本地页内锚点,浏览器永远不会将其发送到服务器。

更新

OP在评论客户端路由中添加了信息。

是的,虽然这在您的应用的服务器端没有任何意义,但您绝对可以拥有带有哈希值的客户端路由。现代浏览器(HTML5支持)甚至可以绑定一个hashchange事件,虽然因为旧浏览器不支持,所以你通常会为jQuery使用hashchange插件,或者Angular支持这个本身。

这个想法基本上是浏览器可以检测到URL更改,并且因为#更改从不触发对服务器的请求,所以这是触发客户端应用程序更改而不触发服务器的便捷方式请求。

另一次更新

来自OP的另一条评论......

在服务器端没有任何东西可以做。如果您的前端人员想要使用基于#的网址/authors#123来触发该作者的客户端加载,那么他的 JS会正在监听 {1}}然后他会将一个包含非常哈希的常规请求发送到服务器,如hashchange,然后使用该响应更新已加载的HTML页。