过去几天我一直在试图模仿这个。我有两种类型的用户:doctors
和hospitals
。医院可以发布cases
,医生可以申请。
doctor has_many cases
,hospital has_many cases
,cases belong_to doctor
和cases belong_to hospital
。
他们都有一个profile
。这是他们可以选择查看案例的起点。医院只能查看他们发布的病例。医生只能看到所有无人认领的病例以及他们目前正在审查的病例。
如何设计我的路线以“有意义”REST?
这是我提出的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
?老实说,感觉就像2个应用程序访问1个数据库。它应该是这样的吗? (我认为这与电子商务并行,买家看到的东西与卖家不同)。因此,非常欢迎任何推荐的资源。
答案 0 :(得分: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
继承这些基本功能。这是我喜欢放置适用于两个控制器的授权方法的地方
# app/controller/cases_controller.rb
class CasesController < ApplicationController
end