【问题标题】:Ruby on Rails Separate admin folder, controllers and layoutsRuby on Rails 分离管理文件夹、控制器和布局
【发布时间】:2018-12-21 11:33:21
【问题描述】:

我是 Ruby on Rails 的新手。我希望管理部分具有以下结构。

  1. app/controller/admin/admin_controller.rb 和 app/controller/admin/ 文件夹下的所有其他管理部分控制器

  2. app/views/layout/admin/admin.html.erb 为管理部分保留单独的 html 布局

同时我想使用 Devise Gem 进行管理员和前端用户身份验证。

我执行了rails g devise:views adminrails generate devise Adminrails g controller admin/home index 命令,为管理员用户创建了视图、模型和控制器。现在我需要添加哪些路由和其他设置,以便 ruby​​ 可以理解,如果我输入 http://localhost:3000/admin/,那么我应该被重定向到 http://localhost:3000/admins/sign_in/ 页面,并且在输入正确的管理员凭据后,我应该重定向到控制器/管理员/home_controller 的索引方法.rb

是否也可以保留 Devise 管理员视图的单一约定,例如 admin/sign_in 而不是 admins/sign_in

我进行了很多搜索,但无法获得相关帮助。请提供实现上述步骤的步骤。

提前致谢。

这是路由文件的样子

Rails.application.routes.draw do
  namespace :admin do
    get 'home/index'
  end

  devise_for :admins

  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  root to: "home#index"
end

当我输入 http://localhost:3000/admin/ 然后我得到以下错误

【问题讨论】:

  • 显示您的路线文件,您尝试做事的方式是否有任何错误?
  • @Subhash,感谢您的快速回复。我已经添加了我的路由文件的代码。

标签: ruby-on-rails layout devise controllers


【解决方案1】:

您的问题是您没有为/admin 定义根路由。

我在其中一个应用程序中有相同的 URL 约定路由,routes.rb 看起来像这样:

Rails.application.routes.draw do

  # Admin part
  devise_for :admins, path: '/admin'

  scope module: :admin, path: '/admin', as: 'admin' do
    root to: 'home#index'
  end

  # Redirect app root to client part
  root to: redirect(path: '/panel', status: 301)

  # Client part
  devise_for :clients, path: '/panel'

  scope module: :panel, path: '/panel', as: 'panel' do
    ...
  end
end

【讨论】:

  • 在为管理员命名空间添加路由后,我现在被重定向到localhost:3000/admins/sign_in。是否可以在管理部分的设计视图中使用单一约定,以便 URL 看起来像 localhost:3000/admin/sign_in
  • 能否请您更新工单中的路线文件?就我而言,它按预期工作/admin/sign_in
  • 对不起,我的错误。我没有将您的代码添加到路由文件中,而是将 root 添加到:admin 命名空间下的'home#index'。最后一个问题,我将如何告诉 ruby​​ 从 /app/views/layout/admin/admin.html.erb 读取管理布局?
  • 还有一个问题,设计管理员登录表单要求输入电子邮件地址和密码进行登录。我从命令行在管理表中创建了一个名为“用户名”的新字段。通过输入用户名和密码对管理员用户进行身份验证需要进行哪些更改?
  • 对于我的布局:app/controller/admin/base_admin_controller.rb 和其他控制器继承自它。然后,我在views/layouts/admin/base_admin.html.erb 关于使用用户名的身份验证中定义了一个布局 - 所有内容都在devise documentation 中进行了描述
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
相关资源
最近更新 更多