对rails很新,我认为这是一个基本问题。
在管理视图中,将对不同的数据模型执行不同的操作。我有一个布局“admin”,其中包含用户单击以加载表单以编辑各种数据集的各种选项卡。
在此视图中可以编辑的所有内容的控制器是否应该在admin_controller中(即,有一个edit_product,edit_user ...),或者最好将这些函数保留在每个模型的控制器中(比如users_controller,products_controller) ,orders_controller)并在控制器中指定使用管理布局?
我正在完成我的第一个rails项目,似乎无论哪种方式都有效,但显然我希望遵循正确的约定,所以任何提示或关于此主题的文章链接都将受到赞赏。
谢谢,
答案 0 :(得分:5)
正确的Rails方法是使用Namespaces
。我将在下面举一个例子:
在controllers
文件夹中,添加一个名为admin
的新文件夹,对于要作为管理员编辑的每个模型,添加一个控制器。这是一个基本的博客应用程序:
app/
models/
views/
controllers/
users_controller.rb
posts_controller.rb
comments_controller.rb
admin/
users_controller.rb
posts_controller.rb
comments_controller.rb
请注意controller
文件夹中的新文件夹层。在每个文件中,您将从:
class UsersController < ApplicationController
为:
class Admin::UsersController < ApplicationController
现在,在congif/routes.rb
文件中,您可以将路由命名为admin命名空间,如下所示:
map.namespace :admin do |admin|
admin.resources :users
admin.resources :posts
admin.resources :comments
end
现在,您可以访问以下网址:http://localhost:3000/admin/users/1
,并且您可以访问您在用户控制器管理版中指定的任何内容。
答案 1 :(得分:2)
迈克的答案很好。我想补充一点,你可以通过使用生成器看到“标准”rails代码:
# in rails 2.3
$ script/generate controller admin/users
# in rails 3.0
$ rails generate controller admin/users
控制器名称中的斜杠定义了命名空间。另请参阅rake routes
了解其创建的命名路径,例如 admin_users_path 等