2013-11-26 148 views
2

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

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

因此,考虑到这一点,我如何才能访问命名空间之外的':create'动作和命令资源的admin命名空间内的':index'动作?

这里是我的路线设置:

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

这意味着订单:

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

    scope '/admin' do 
     resources :orders 
    end 

回答

-2

我跑的时候 '耙路线',订单#创建是利用 'orders_path/orders_url' 注意到#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值。

0

“new”方法用于呈现资源的创建表单,而提交此表单时会调用create方法。因此,为了在管理命名空间和命名空间内的其他操作之外启用命令,请尝试以下操作:

resources :orders, only: [:new] 

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