Ruby on Rails命名空间路由

时间:2013-11-26 22:28:42

标签: ruby-on-rails ruby namespaces routes

我目前正在尝试修复订单资源的路线。我有一个'admin'命名空间,它包含管理应用程序中各种资源的关键资源操作。

我希望访客能够在admin命名空间之外创建一个订单,而我希望所有订单资源的操作在admin命名空间中可用。但是,当我在命名空间外指定':create'操作时,命名空间中的':index'操作不可用。我唯一的理论是这两个动作共享相同的路径,即/ orders,因为当我从命名空间外部删除':create'动作时,':index'动作开始在命名空间内工作。

因此,考虑到这一点,我如何访问命名空间外的':create'操作和订单资源的admin命名空间内的':index'操作?

这是我的路线设置:

  resources :orders, :only => [:new, :create, :update_country]

  scope '/admin' do
      resources :orders
  end

2 个答案:

答案 0 :(得分:0)

方法'new'用于渲染资源的创建表单,而方法'create'在提交此表单时调用。因此,为了在admin命名空间之外创建一个订单以及命名空间中的其他操作,请尝试一下:

resources :orders, only: [:new]

scope '/admin' do
    resources :orders, except: [:new]
end

答案 1 :(得分:-2)

我注意到跑步时的路线'订单#create正在使用' orders_path / orders_url':

orders POST   /orders(.:format)                     orders#create

这意味着admin命名空间中的订单#index在视图中没有引用路径:

       GET    /admin/orders(.:format)               orders#index

因此,解决方案是使用不同的语法来实现具有定制路径值的命名空间,例如, ' admin_orders_path'如下所示:

的routes.rb

  namespace :admin do
    resources :orders
  end

佣金路线的结果:

              orders POST   /orders(.:format)                     orders#create
        admin_orders GET    /admin/orders(.:format)               admin/orders#index

事后看来,这似乎是一种在应用程序中管理我的管理命名空间的更清晰简洁的方法;为路由资源定义了管理路径/ url值。