根据路由显示同一控制器的不同视图

时间:2013-06-28 18:27:50

标签: ruby-on-rails

我正在为网站构建管理界面。我有一些具有管理功能/视图的控制器也具有面向用户的视图。例如,当用户访问/博客时,它应该显示每个博客帖子的标题,日期,第一段等,其中包含阅读整个帖子的链接。如果管理员进入管理员/帖子,他们会看到一个只有博客帖子标题的列表,有多少评论,编辑/删除链接,创建帖子的链接等等。

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

namespace :admin do
  resources :posts
end

我需要单独的控制器吗?

2 个答案:

答案 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可能是值得的。但如果只有一些差异,那就足够了。

嗯,希望有所帮助。