在讨论使用动态段的路由时,Ruby on Rails指南(v4.0.1)说" 你不能使用:namespace或:module with:controller path segment. "他们继续建议:" 如果你需要这样做然后使用约束:控制器匹配您需要的命名空间."
我在很多命名空间下有很多控制器.如果我可以在我的情况下使动态段工作,那么我可以使用routes.rb中的一行处理所有路由.也许是这样的:
get '/:namespace/:controller/:action' #note: this isn't valid
但这不起作用(见上文).我宁愿保留名称空间,所以我可以在我的routes.rb文件中为每个名称空间写出一个新行,然后添加一个约束来检查URL是否要求该名称空间.这不会是世界末日.它看起来非常干燥和耻辱,因为所有的路由信息都巧妙地呈现在URL中.
我只是想知道是否有任何偷偷摸摸的方式似乎(对我来说)像动态段路由的功能有点差距.是否可以让路由DSL运行一个块(与Constraints不同)执行比路由匹配的布尔值yes/no更复杂的块?或许我遗漏了标准Rails路由功能的工作方式.任何建议赞赏.
更新:只是拼出一点点.我对Rails指南的理解是,我需要有这样的行:
post ':controller/:action' , controller: /user_details\/[^\/]+/ post ':controller/:action' , controller: /preferences\/[^\/]+/
...等等.如果我想要20个名称空间,那么我将需要20个这样的行.我只是想知道是否有一种更简洁的方式接近上面给出的我的1线理想.