【问题标题】:Rails Many to Many Relationship with occasional Nested RoutesRails 与偶尔的嵌套路由的多对多关系
【发布时间】:2010-03-25 09:57:28
【问题描述】:

随着我对 Rails 的了解越来越多,并打破了我从 ASP.Net 时代开始的设计思维,今天早上我正在考虑一个场景,但不知道是否可以这样做。

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

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

我想删除从业者表格中的复选框。拥有自己的表单,我可以这样调用:

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

但是,从管理员的角度来看,我仍然需要能够在没有医生对象的情况下管理治疗:

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

这也有身份验证障碍。

  • 是否有更简单的解决方案来提取我忽略的治疗方法?
  • 是否可以在某些时候嵌套路由?
  • 我是不是今天早上喝了太多咖啡,因此目前处于精神错乱状态?

【问题讨论】:

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


    【解决方案1】:

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

    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 之类的东西继承,这些东西在允许执行任何操作之前会执行足够严格的身份验证检查。

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

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

    【讨论】:

    • 哇,这是分割两个区域的好方法,喜欢它!我的思维方式显然还与 ror 的习语不相符——你的设计方法是从哪里学来的,还是只是从经验中得出的?再次感谢您的帮助 - 对我来说是一个巨大的帮助!
    • 这是构建十几个重要的 Rails 站点的结果。你会看到这样的模式。希望它也适合你。
    猜你喜欢
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    相关资源
    最近更新 更多