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

标签 ruby-on-rails ruby-on-rails-4 rails-routing

在讨论使用动态段进行路由时,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/

相关文章:

ruby-on-rails - Messy 从 Rails 3 controller 返回查看

ruby-on-rails - 对我的位置进行地理编码并使用 google-maps-for-rails gem 显示

ruby-on-rails - Rails 3.2 + Ruby 1.9.3,created_at 返回时区错误

ruby-on-rails - NoMethodError at/calculate undefined method `id' for nil :NilClass in Rails Appilcation

ruby-on-rails - Posts#index 中的 Sprockets::FileOutsidePaths,其中 application.css.scss 不再位于加载路径下

ruby-on-rails - 503 : Instagram is rate limiting your requests

jquery - 如何让 Jquery UI Autocomplete 与 Rails 4 一起工作?

ruby-on-rails - RSpec 找不到我的命名路线

ruby-on-rails - 找不到没有 ID : Rails 4 custom controller action 的 [MODEL]