我正在为网站构建管理界面。我有某些具有管理功能/视图的控制器也具有面向用户的视图。例如,当用户访问 /blog 时,它应该显示每篇博文的标题、日期、第一段等,并带有阅读整篇博文的链接。如果管理员进入 admin/posts,他们将看到仅包含博客文章标题、评论数量、编辑/删除链接、创建帖子的链接等的列表。
我将如何做到这一点?我的(简化的)路由文件是这样的:
namespace :admin do
resources :posts
end
我需要有单独的控制器吗?
我正在为网站构建管理界面。我有某些具有管理功能/视图的控制器也具有面向用户的视图。例如,当用户访问 /blog 时,它应该显示每篇博文的标题、日期、第一段等,并带有阅读整篇博文的链接。如果管理员进入 admin/posts,他们将看到仅包含博客文章标题、评论数量、编辑/删除链接、创建帖子的链接等的列表。
我将如何做到这一点?我的(简化的)路由文件是这样的:
namespace :admin do
resources :posts
end
我需要有单独的控制器吗?
通常在使用时,namespaces
您希望代码也被命名空间。我会选择 2 个不同的控制器来提供 2 个不同的视图。
app/controllers/posts_controller.rb
app/controllers/backend/posts_controller.rb
或者
app/controllers/posts_controller.rb
app/controllers/admin_area/posts_controller.rb
你明白了。我会对视图做同样的事情。
你的控制器看起来像这样:
class PostsController < ApplicationController
end
class Backend::PostsController < BackendController
end
class BackendController < ApplicationController
end
有很多方法可以解决这个问题,我真的无法认为其中一个比另一个“正确”。为简单起见,我将提供一个快速解决方案,但不可否认,这是一条捷径。
据推测,您有一个登录用户访问此 /admin 路由,并且 current_user 将被授权为管理员,因此您可以在 show 方法中使用它来发挥您的优势。
if current_user.admin?
render 'admin_show'
else
render 'show'
当然,您的视图会呈现不同的实现。
但是,如果您对这些方法的作用有很多不同,那么创建一个新的 admin_posts_controller 可能是值得的。但是,如果只有几个差异,那可能就足够了。
嗯,希望有帮助。