Rails-构造管理员/用户/公共控制器的方式

Mat*_*ias 5 controller ruby-on-rails

虚构的Rails应用程序具有以下资源:

Photographers
Images
Comments
Run Code Online (Sandbox Code Playgroud)

A Photographer有很多Images,有很多Comments

每位摄影师都有登录,能够查看,上传,编辑和删除他们的图像,评论以及他们自己的个人资料.

管理界面可用,可以编辑图像,摄影师和评论.

此外,摄影师,他们的图像和评论可以从公共界面获得,无需登录,访问者可以添加评论.

我的问题是:什么是Rails-构建控制器的方式?我正在考虑为每个"角色"(公共,帐户,管理员)使用名称空间,如下所示:

# For administrator
Admin::PhotographersController
Admin::ImagesController
Admin::CommentsController

# For a logged in photographer
AccountController (?)
Account::ImagesController
Account::CommentsController

# For public
PhotographersController
ImagesController
CommentsController
Run Code Online (Sandbox Code Playgroud)

但是 - 这些控制器的一些方法是重叠的.这是最好的方式,即使它不是那么干?

谢谢!

Max*_*ams 3

如果它们重叠,您可以将基本控制器扩展到帐户/管理命名空间。例如,您使用 ImagesController 来执行每个人都可以看到的操作。这会像平常一样扩展 ApplicationController。然后你做你的管理版本的ImageController,它扩展了ImagesController。然后,您可以在管理版本中添加/覆盖所需的不同行为的方法,或者可能只是简单地添加几个过滤器,例如 require_admin ,它检查 current_user 是否是管理员用户,如果不是。