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

时间:2014-03-05 19:26:22

标签: ruby-on-rails

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

doctor has_many caseshospital has_many casescases belong_to doctorcases 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

还有一些问题:

  1. 他们共用控制器吗?我只是假设他们有自己的控制器。
  2. 如何让他们分享相同的路线,但显示不同的东西?例如:医生访问时的“个人资料/案例”=查看他们的牌照,以及医院访问时的“个人资料/案例”=查看他们的牌照。
  3. 我是否甚至创建了cases_controller
  4. CanCan是一个很好的用例吗?
  5. 老实说,感觉就像2个应用程序访问1个数据库。它应该是这样的吗? (我认为这与电子商务并行,买家看到的东西与卖家不同)。因此,非常欢迎任何推荐的资源。

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