1

我希望能够更好地理解 rails routes 文件,但我自己无法弄清楚,因为它太复杂了。

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

管理控制器操作:

  • 索引(重定向到登录)
  • 登录
  • 登出
  • 试图

ManageProduct 控制器操作:

  • 指数
  • 模型产品的 CRUD(删除、编辑、显示、列表)

管理产品类别

  • 指数
  • 模型 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 不是管理员控制器操作...

注意:一切正常(2 个模型的 CRUD 和通过标准不推荐路线的操作链接

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

非常感谢您的帮助和关注

问候

4

1 回答 1

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

于 2010-12-19T16:48:43.107 回答