【问题标题】:Multiple namespace declaration in rails routesRails 路由中的多个命名空间声明
【发布时间】:2013-01-23 06:06:16
【问题描述】:

如果我有两个命名空间,并且它们使用相同的资源,我可以执行以下操作吗?

namespace :captures, :displays do
  resources :ones
  resources :twos
  resources :threes
  # ...
end

代替:

namespace :captures do
  resources :ones
  resources :twos
  resources :threes
  # ...
end

namespace :displays do
  resources :ones
  resources :twos
  resources :threes
  # ...
end

或者需要单独的声明。我知道如果他们最终拥有不同的资源,他们将不得不分开,但如果我可以声明共享资源,那么我可以做这样的事情:

#shared
namespace :captures, :displays do
  resources :ones
  resources :twos
  resources :threes
  # ...
end

#individual
namespace :captures do
  resources :fours
  resources :fives
  resources :sixes
end
namespace :displays do
  resources :sevens
  resources :eights
  resources :nines
end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    我在寻找类似答案时遇到了这张票。我以前这样解决过这个问题:

    %w[captures displays].each do |space|
      namespace space do
        resources :ones
        resources :twos
        resources :threes
        # ...
      end
    end
    

    【讨论】:

      【解决方案2】:

      是的,即使使用公共资源,在路由中使用命名空间时也需要单独声明。

      【讨论】:

      【解决方案3】:

      您不能这样做 - 命名空间方法中的第二个选项是哈希。命名空间方法只是 :path、module 和 :as 的快捷方式。它不会在一次调用中对两个命名空间执行此操作。

      【讨论】:

        【解决方案4】:

        您也可以像这样将 proc 作为一个块传递给命名空间方法:

        duplicate_routes = -> do
          resources :ones
          resources :twos
        end
        
        namespace :captures, &duplicate_routes
        namespace :displays, &duplicate_routes
        duplicate_routes.call # use the same routes in root namespace
        

        【讨论】:

          猜你喜欢
          • 2011-04-05
          • 1970-01-01
          • 2011-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-01
          • 2017-11-09
          • 1970-01-01
          相关资源
          最近更新 更多