ruby-on-rails - 如何构建一条包含 `#` 的路线?

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

如何构建带有标签 (#) 的路线?我创建了路线

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/

相关文章:

ruby-on-rails - Ruby On Rails,Redis::CommandError: 'set' 命令的 ERR 参数数量错误

ruby-on-rails - ActiveAdmin,现有(但裸露的)用户模型中的设计 2 不起作用

AngularJS ng-repeat with ng-change

AngularJS:ng-model 未绑定(bind)到 ng-checked 复选框

mysql - 在 rails 4 应用程序中检查用户 ssh 公钥

ruby-on-rails - 在 Ruby on Rails 中保留表单提交失败的 URL

javascript - AngularJS 通过 ng-model 触发 ng-change

angularjs - 如何在 rails slim 模板中添加 Angular 属性指令以输入?

ruby-on-rails - 如何在 Rails 之外使用 ActiveRecord?

ruby-on-rails - 尝试包含辅助模块时未初始化的常量