ruby-on-rails - 在 Rails 中创建一个管理目录

标签 ruby-on-rails ruby routing content-management-system rails-routing

几周来,我一直在为一个网站开发 CMS 后端。这个想法是首先在后端制作所有东西,以便它可以管理将在主网站上显示的数据库和信息。

到目前为止,我的所有代码都设置在普通的 Rails MVC 结构中。所以用户管理员是/users,视频是/videos。

我的计划是获取代码并将其移动到/admin 目录。所以上面的两个 Controller 需要通过/admin/users 和/admin/videos 访问。我不确定如何执行 ruote(添加/admin 作为前缀),也不确定如何管理逻辑。我想做的是设置一个额外的“中间” Controller ,当访问/admin 目录时,它以某种方式嵌套在 ApplicationControler 和目标 Controller 之间。这样,任何额外的标志和重载方法都可以仅为/admin 部分生成(我相信我也可以为此使用过滤器)。

如果这可行,那么下一个问题就是分离 View 逻辑(但这只是重命名文件夹等)。

要么我这样做,要么我有两个 Rails 实例在它们之间共享 MVC 代码(我猜也是数据库),但我担心这会导致很多重复错误。

关于我应该如何着手做这件事有什么想法吗?

非常感谢!

最佳答案

如果您不介意每个资源有两个 Controller ,您可以有一个单独的“admin”命名空间。我喜欢这种方式,因为管理部分与公共(public)部分完全不同。管理 Controller 执行所有 CRUD 操作,而公共(public) Controller 仅执行显示和索引操作。

路线.rb:

map.namespace :admin do |admin|
  admin.resources :users
  admin.resources :videos
end

map.resources :videos, :only => [:index, :show]

你的 Controller 可能是这样的:

class VideosController < PublicController; end

class Admin::VideosController < Admin::AdminController; end

class PublicController < ApplicationController
  layout 'public'
  before_filter :load_public_menu
end

class Admin::AdminController < ApplicationController
  layout 'admin'
  before_filter :login_required, :load_admin_menu
end

命名空间 Controller 和 View 在 app/controllers 和 app/views 目录中有自己的子目录。如果你使用form_for helper,你需要修改它的参数:

form_for [:admin, @video] do |f|

关于ruby-on-rails - 在 Rails 中创建一个管理目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2963799/

相关文章:

ruby-on-rails - 如何在服务器之间同步数据库

ruby-on-rails - Rails 的开发环境和生产环境之间有哪些重要区别?

ruby - 在 Ruby 中创建副本

mysql - 设计助手返回零

ruby 1.8.7 未定义的局部变量

ruby-on-rails - 嵌套资源 - 如何避免冗余路由?

javascript - 未知提供者 : $routeParamsProvider <- $routeParams

javascript - $(...).modal 不是函数 Booststrap 3 & Rails 5

sql - 帮助 Rails find_by 查询

Node.js/快速路由