Rails与偶尔的嵌套路由有很多很多关系

时间:2010-03-25 09:57:28

标签: ruby-on-rails design-patterns many-to-many partials nested-routes

由于我正在学习更多关于rails的知识,并且从ASP.Net时代开始思考我的设计思想,我今天早上正在考虑一个场景,但不知道是否可以这样做。

从业者通过服务获得许多治疗 - 反之亦然

在我的控制面板中,我有一个区域供从业者编辑他们的详细信息(姓名,联系信息等),也可以通过复选框选择他们的治疗方法。

我想从Practitioners _form中删除复选框。有自己的形式,我可以这样打电话:

<%= link_to "Edit Treatments", edit_practitioner_treatments(@practitioner) %>

然而,从管理的角度来看,我仍然需要能够在没有实践对象的情况下管理治疗:

<%= link_to "Edit Treatments", edit_treatments(@treatment) %>

也有认证障碍。

  • 是否有一个更容易解决方案来提取我忽略的治疗方法?
  • 是否可以在某些时候使用嵌套路由?
  • 今天早上我的咖啡太多了,因此目前处于疯狂状态吗?

1 个答案:

答案 0 :(得分:3)

通常在考虑管理功能时,管理功能通常会向用户提供一个完全不同的界面,通过权限检查更多地基于“这会破坏某些东西”而不是“应该允许”,创建一个带有单独控制器的管理区域是有利的。例如:

map.namespace :admin do |admin|
  # Admin::PracticionersController
  map.resources :practicioners

  # Admin::TreatmentsController
  map.resources :treatments
end

map.resources :practicioners do |practicioner|
  practicioner.resources :treatments
end

map.resources :treatments do |treatment|
  treatment.resources :practicioners
end

所有Admin :: *控制器都可以继承Admin :: BaseController之类的东西,它允许执行足够严格的身份验证检查,然后才允许执行任何操作。

在我见过的大多数应用程序中,面向用户的前端都有一个设计或风格元素,它们的布局经常被导航元素,广告或其他编辑内容包围。创建一个整洁的单独管理视图,每页显示更多信息,并允许排序或搜索未暴露给用户的维度,这对于管理中等大小的数据集非常有价值。

虽然制作这些额外的管理控制器及其相关表单似乎需要做很多工作,但如果您在设计中小心,可以在两个区域之间回收大量功能,尤其是页面部分。