0

我正在为网站构建管理界面。我有某些具有管理功能/视图的控制器也具有面向用户的视图。例如,当用户访问 /blog 时,它应该显示每篇博文的标题、日期、第一段等,并带有阅读整篇博文的链接。如果管理员进入 admin/posts,他们将看到仅包含博客文章标题、评论数量、编辑/删除链接、创建帖子的链接等的列表。

我将如何做到这一点?我的(简化的)路由文件是这样的:

namespace :admin do
  resources :posts
end

我需要有单独的控制器吗?

4

2 回答 2

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
于 2013-06-28T18:40:59.593 回答
0

有很多方法可以解决这个问题,我真的无法认为其中一个比另一个“正确”。为简单起见,我将提供一个快速解决方案,但不可否认,这是一条捷径。

据推测,您有一个登录用户访问此 /admin 路由,并且 current_user 将被授权为管理员,因此您可以在 show 方法中使用它来发挥您的优势。

if current_user.admin?
  render 'admin_show'
else
  render 'show'

当然,您的视图会呈现不同的实现。

但是,如果您对这些方法的作用有很多不同,那么创建一个新的 admin_posts_controller 可能是值得的。但是,如果只有几个差异,那可能就足够了。

嗯,希望有帮助。

于 2013-06-28T18:38:36.067 回答