【发布时间】:2011-09-03 17:57:10
【问题描述】:
我有一个设计问题,希望得到深思熟虑的答复。
假设您有一个简单的应用程序(例如),它有一个用户、公司和主题模型。一家公司has_one 主题和has_many 用户。
管理员(用户)可以完全管理公司、用户和主题 - 整个 REST 堆栈,以及一些其他操作。管理员应该对所有这 3 个资源执行其他用户角色无法执行的操作。
我们还有一个公司角色。此角色可以编辑他们自己的公司,也可以从管理员用户添加的主题中选择一个主题作为不错的默认值,或者他们可以制作自己的主题。
公司还可以添加/编辑/删除用户,但仅限于他们的公司。这些页面将具有不同的视图,并且它们将具有与管理员不同的行为 - 有些重叠,但有些东西会受到限制,而另一些会被添加。
现在,我们有一些重要的设计选择,我想知道最佳实践是什么。
第 1 部分
在 Rails 中,为管理员设置resources :users, :companies, :themes 并为公司用户设置resource :company, :theme, :users 是有意义的。
当然,我们在这里遇到了一些命名冲突——单数和复数——所以我们可能想尝试像resource :my_company, :my_theme, :my_users 这样的东西来分隔它们?还是有更好的解决方案?
此外,主题只是公司的一个组成部分,所以也许我们想嵌套它们?
:resource :my_company do
:resource :theme
:resources :users
end
这可以正常工作,但它可能会混淆我们指的是哪个用户控制器......不是吗?这真的很棘手,我很想知道如何处理这个问题。你有1个控制器,还是2个?你给他们起什么名字?
所以这就是一个例子:
http://myapp.com/my_company/theme/edit
http://myapp.com/my_company/users/1/delete
公司用户也可能希望通过 ajax 获得主题列表,因此他们调用是否正确:
http://myapp.com/themes.json
?
这是如何处理这种情况,还是有更好的方法?
第 2 部分
另外,您的目录结构应该是什么样的?您是否应该按用户角色分隔控制器?
/app/controllers/admin/companies_controller.rb
/app/controllers/admin/themes_controller.rb
/app/controllers/admin/users_controller.rb
/app/controllers/company/my_company_controller.rb
/app/controllers/company/theme_controller.rb
/app/controllers/company/users_controller.rb
或者有没有更好的方法来处理这个问题?
users_controller 重复了 2 倍,而且 Theme 和 Themes 之间存在细微差别,这似乎很奇怪。
我非常感谢对此深思熟虑的回应。谢谢!
【问题讨论】:
标签: ruby-on-rails ruby controller routes