【发布时间】:2013-12-01 14:05:12
【问题描述】:
在讨论使用动态段进行路由时,Ruby on Rails 指南 (v4.0.1) 说“您不能将 :namespace 或 :module 与 :controller 路径段一起使用。”他们继续说建议:“如果您需要这样做,请在 :controller 上使用与您需要的命名空间相匹配的约束。”
我在很多命名空间下都有很多控制器。如果我可以让动态段在我的情况下工作,那么我可以使用 routes.rb 中的一行来处理所有路由。也许是这样的:
get '/:namespace/:controller/:action' #note: this isn't valid
但这行不通(见上文)。我宁愿保留命名空间,所以我可以在我的 routes.rb 文件中为每个命名空间写一个新行,然后添加一个约束来检查 URL 是否要求该命名空间。那不会是世界末日。它看起来如此不干燥和可耻,因为所有路由信息都整齐地呈现在 URL 中。
我只是想知道是否有什么鬼鬼祟祟的方法可以绕过(在我看来)动态分段路由功能的一些差距。是否可以让路由 DSL 运行一个块(与约束不同)在路由是否匹配时执行比布尔值是/否更复杂的事情?或者也许我在标准 Rails 路由功能的工作方式上遗漏了一些东西。任何建议表示赞赏。
更新:只是为了更详细地说明它。我对 Rails 指南的理解是我需要有这样的行:
post ':controller/:action' , controller: /user_details\/[^\/]+/
post ':controller/:action' , controller: /preferences\/[^\/]+/
...等等。如果我想要 20 个命名空间,那么我需要 20 行这样的行。我只是想知道是否没有更简洁的方法可以接近我上面给出的 1 线理想。
【问题讨论】:
-
所以您要“干燥”您的 routes.rb 文件?
-
添加更新只是为了解释一下我的“干燥”目标是什么,假设它是可能的。
标签: ruby-on-rails ruby-on-rails-4 rails-routing