如何在其中构建带有主题标签(#
)的路线?我创建了路线
get 'authors/#/:id' => 'authors#show
但这会产生路线
GET /authors/%23/:id(.:format)
因此%23
应该是#
。
答案 0 :(得分:7)
您不能在服务器上的URL中使用#
,它会调用Fragment Identifier并且是本地页内锚点,浏览器永远不会将其发送到服务器。
OP在评论客户端路由中添加了信息。
是的,虽然这在您的应用的服务器端没有任何意义,但您绝对可以拥有带有哈希值的客户端路由。现代浏览器(HTML5支持)甚至可以绑定一个hashchange
事件,虽然因为旧浏览器不支持,所以你通常会为jQuery使用hashchange
插件,或者Angular支持这个本身。
这个想法基本上是浏览器可以检测到URL更改,并且因为#
更改从不触发对服务器的请求,所以这是触发客户端应用程序更改而不触发服务器的便捷方式请求。
来自OP的另一条评论......
在服务器端没有任何东西可以做。如果您的前端人员想要使用基于#
的网址/authors#123
来触发该作者的客户端加载,那么他的 JS会正在监听 {1}}然后他会将一个包含非常哈希的常规请求发送到服务器,如hashchange
,然后使用该响应更新已加载的HTML页。