如何为访问同一资源的两类用户创建路由?
在过去的几天里,我一直在试图模仿这个。 我有两种类型的用户: doctors
和hospitals
。 医院可以发布cases
,医生可以索取病例。
doctor has_many cases
, hospital has_many cases
, cases belong_to doctor
, cases 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
还有几个问题:
- 他们共用控制器吗? 我只是假设他们有自己的控制器。
- 如何让他们分享相同的路线,但显示不同的东西? 例如:医生访问时的“个人资料/案例”=查看他们的牌照,以及医院访问时的“个人资料/案例”=查看他们的牌照。
- 我甚至创建了
cases_controller
吗? - 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_controller
inheritance这些函数。 这是我喜欢放置适用于两个控制器的授权方法的地方
# app/controller/cases_controller.rb class CasesController < ApplicationController end