gpt4 book ai didi

ruby-on-rails - Rails 4 路由 : using namespaces with dynamic segments

转载 作者:行者123 更新时间:2023-12-03 15:02:02 25 4
gpt4 key购买 nike

在讨论使用动态段进行路由时,Ruby on Rails 指南 (v4.0.1) 说“您不能将 :namespace 或 :module 与 :controller 路径段一起使用。”他们继续建议:“如果你需要这样做,那么在 :controller 上使用一个与你需要的命名空间相匹配的约束。”

我在相当多的命名空间下有很多 Controller 。如果我可以让动态段在我的情况下工作,那么我可以用 routes.rb 中的一行来处理所有路由。也许是这样的:

get '/:namespace/:controller/:action'             #note: this isn't valid

但这不起作用(见上文)。我宁愿保留命名空间,所以我可以在我的 routes.rb 文件中为每个命名空间写出新的一行,然后添加一个约束来检查 URL 是否要求该命名空间。那不会是世界末日。它看起来如此不干燥和一种耻辱,因为所有路由信息都整齐地显示在 URL 中。

我只是想知道是否有任何偷偷摸摸的方法来解决(对我而言)动态分段路由功能的一些差距。是否可以让路由 DSL 运行一个块(与约束不同)在路由是否匹配上执行比 bool 值是/否更复杂的事情?或者也许我在标准 Rails 路由功能的工作方式中遗漏了一些东西。任何建议表示赞赏。

更新:只是为了更清楚地说明它。我对 Rails 指南的理解是,我需要有这样的行:
post ':controller/:action' , controller: /user_details\/[^\/]+/
post ':controller/:action' , controller: /preferences\/[^\/]+/

...等等。如果我想要 20 个命名空间,那么我需要其中的 20 行。我只是想知道是否没有更简洁的方法来接近我上面给出的 1-line 理想。

最佳答案

如果您想要的是匹配所有路线的动态路线,例如

post 'user_details/name/edit'     => 'user_details/name#edit'
post 'user_details/address/edit' => 'user_details/address#edit'
post 'user_details/password/edit' => 'user_details/password#edit'
post 'preferences/privacy/edit' => 'preferences/privacy#edit'
post 'preferences/colors/edit' => 'preferences/colors#edit'

那么你可以使用
post ':controller/:action'

:controller部分也将匹配命名空间 Controller 。

已针对 Rails 4.0.1 和 4.2.0 进行验证。

关于ruby-on-rails - Rails 4 路由 : using namespaces with dynamic segments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20312954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com