如何构建带有标签 (#
) 的路线?我创建了路线
get 'authors/#/:id' => 'authors#show
但这会生成路线
GET /authors/%23/:id(.:format)
所以它有
%23
#
应该。
最佳答案
您不能使用 #
在服务器上的 URL 中,它被称为 Fragment Identifier并且是浏览器永远不会发送到服务器的本地页内 anchor 。
更新
OP 在客户端路由的评论中添加了信息。
是的,虽然这在您的应用程序的服务器端没有意义,但您绝对可以在客户端路由中包含哈希值。现代浏览器(支持 HTML5)甚至有一个 hashchange
您可以绑定(bind)到的事件,但由于旧版浏览器不支持该事件,您通常会使用 hashchange
jQuery 插件,或者 Angular 本身也支持。
这个想法是基本上浏览器可以检测到 URL 的变化,因为 #
更改永远不会触发对服务器的请求,那么这是在客户端应用程序中触发更改而不触发服务器请求的便捷方式。
另一个更新
在OP的另一条评论之后......
您在服务器端根本不需要做任何事情。如果您的前端人员想使用 #
- 基于 URL,如 /authors#123
触发该作者的客户端加载,然后是他的 JS 会监听 对于那个hashchange
然后他会做对服务器的常规、不包含哈希的请求 喜欢 GET /authors/123.json
然后将使用来自该响应的响应来更新加载页面的 HTML。
关于ruby-on-rails - 如何构建一条包含 `#` 的路线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35091230/