使用rails管理路由

时间:2010-12-19 16:34:10

标签: ruby-on-rails rails-routing

我希望能够更好地理解rails routes文件,但由于它过于复杂,我无法自己理解。

基本上我有3个控制器。它们是:Admin,ManageProduct和ManageProductCategory(我有2个模型:Product,ProductCategory和model ProductCategory has_many / belongs_to产品关系)

管理控制器操作:

  • index(重定向到登录)
  • 登录
  • 注销
  • 尝试

ManageProduct控制器操作:

  • 索引
  • 模型产品的CRUD(删除,编辑,显示,列表)

ManageProductCategory

  • 索引
  • 模型product_category
  • 的CRUD(删除,编辑,显示,列表)

我希望能够管理我的应用程序路由,以便在输入浏览器时输入:

mywebsite/admin
mywebsite/admin/login
mywebsite/admin/logout
mywebsite/admin/manage_product
mywebsite/admin/manage_product_category/1
mywebsite/admin/manage_product/delete
mywebsite/admin/manage_product/10

等等......

问题是我无法弄清楚如何设置我的路由文件,以便rails知道admin / manage_product不是管理员控制器动作......

注意:一切都已经有效(两个型号的CRUD以及通过标准推荐路线的行动链接

match ':controller(/:action(/:id(.:format)))'

非常感谢您的帮助和关注

此致

1 个答案:

答案 0 :(得分:2)

您需要的是命名空间

# Rails 2.3.x
map.namespace :admin do |admin|
  map.resources :products
end

# Rails 3
namespace "admin" do
  resources :products
end

这将为您提供以下URL帮助程序方法:

admin_products_path    GET  { :controller => "admin/products", :action => "index" }
new_admin_product_path GET  { :controller => "admin/products", :action => "new" }
admin_products_path    POST { :controller => "admin/products", :action => "create" }

要在admin命名空间下生成控制器,您需要在控制台下执行以下操作:

$ rails generate controller admin/products

这将为您生成admin下的app/controllers目录,然后生成products.rb文件:

class Admin::ProductsController < ApplicationController
end

现在,在admin命名空间下的登录,您可以使用Devise进行设置,这是一个用于身份验证的gem。您可以在此处进一步了解:https://github.com/plataformatec/devise/wiki/_pages