Rails Beginner - 将函数放入哪个控制器?

时间:2010-09-24 04:16:09

标签: ruby-on-rails

对rails很新,我认为这是一个基本问题。

在管理视图中,将对不同的数据模型执行不同的操作。我有一个布局“admin”,其中包含用户单击以加载表单以编辑各种数据集的各种选项卡。

在此视图中可以编辑的所有内容的控制器是否应该在admin_controller中(即,有一个edit_product,edit_user ...),或者最好将这些函数保留在每个模型的控制器中(比如users_controller,products_controller) ,orders_controller)并在控制器中指定使用管理布局?

我正在完成我的第一个rails项目,似乎无论哪种方式都有效,但显然我希望遵循正确的约定,所以任何提示或关于此主题的文章链接都将受到赞赏。

谢谢,

2 个答案:

答案 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,并且您可以访问您在用户控制器管理版中指定的任何内容。

您可以在this StackOverflow问题中阅读更多内容,并阅读路线here

答案 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