如何为访问同一资源的两类用户创建路由?

在过去的几天里,我一直在试图模仿这个。 我有两种类型的用户: doctorshospitals 。 医院可以发布cases ,医生可以索取病例。

doctor has_many caseshospital has_many casescases belong_to doctorcases belong_to hospital

他们两个都有profile 。 这是他们可以选择查看他们所拥有的案例的起点。 医院只能查看他们发布的病例。 医生只能看到所有无人认领的病例以及他们目前正在审查的病例。

如何设计我的路线以“有意义”RESTful?

这是我提出的routes.rb:

 resource :doctor_profile, only: :show do #=> Show doctor profile resources :cases, only: [:index, :show, :edit] #=> See 1 or all cases, edit case end resource :hospital_profile, only: :show do resources :cases, only: [:create, :index, :show, :edit] end 

还有几个问题:

  1. 他们共用控制器吗? 我只是假设他们有自己的控制器。
  2. 如何让他们分享相同的路线,但显示不同的东西? 例如:医生访问时的“个人资料/案例”=查看他们的牌照,以及医院访问时的“个人资料/案例”=查看他们的牌照。
  3. 我甚至创建了cases_controller吗?
  4. CanCan是一个很好的用例吗?

老实说,感觉就像2个应用程序访问1个数据库。 它应该是这样的吗? (我认为这与电子商务并行,买家看到的东西与卖家不同)。 所以任何推荐的资源都非常受欢迎。

通常我在这种情况下会做的是创建这个控制器结构

 /app/controllers/doctors_controller.rb /app/controllers/doctors/cases_controller.rb /app/controllers/hospitals_controller.rb /app/controllers/hospitals/cases_controller.rb 

然后,对于每个嵌套目录,您需要将控制器包装在模块中。 例如在doctors/cases_controller.rb

 module Doctors class CasesController < ApplicationController end end 

现在您可以创建routes.rb

 resources :doctors do resources :cases, controller: 'doctors/cases', only: [:index, :show] do post '/claim', action: 'claim' end end 

您还可以考虑为处理基本函数的情况添加根级控制器,两个嵌套的cases_controllerinheritance这些函数。 这是我喜欢放置适用于两个控制器的授权方法的地方

 # app/controller/cases_controller.rb class CasesController < ApplicationController end