我正在为网站构建管理界面。我有一些具有管理功能/视图的控制器也具有面向用户的视图。例如,当用户访问/博客时,它应该显示每个博客帖子的标题,日期,第一段等,其中包含阅读整个帖子的链接。如果管理员进入管理员/帖子,他们会看到一个只有博客帖子标题的列表,有多少评论,编辑/删除链接,创建帖子的链接等等。
我将如何做到这一点?我的(简化)路线文件是:
namespace :admin do
resources :posts
end
我需要单独的控制器吗?
答案 0 :(得分:2)
通常在使用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
答案 1 :(得分:0)
有很多方法可以解决这个问题,我真的不能想到一个方法在另一个方面是“正确的”。为简单起见,我会提供一个快速解决方案,但是,诚然,这是一条捷径。
据推测,您有一个登录用户进入此/ admin路由,并且current_user将被授权为管理员,因此您可以在show方法中使用它。
if current_user.admin?
render 'admin_show'
else
render 'show'
您的观点当然会呈现不同的实现。
但是,如果要在方法方面做出许多不同,那么创建一个新的admin_posts_controller可能是值得的。但如果只有一些差异,那就足够了。
嗯,希望有所帮助。