我创建了一个用户表,并实现设计。然后我添加了一个枚举角色给用户表,以便我可以识别管理员,导游和成员。
我想要做的是基于枚举用户类型的某些资源限制的路线。我试过了:
resources :users.guide do
get 'guide/dashboard', :to => 'guides#dashboard'
end
还有一些变种,但没有成功。上面给我的错误:
undefined method `guide' for :users:Symbol
我身边做了一些戳,似乎无法找到一个很好的回应。我回避CanCanCan和Rolify,我想保持事情基本的可能。有任何想法吗?谢谢!
编辑按照以下建议
于是我去了,如下建议,以使文件类似于此更新了我的路线:
Rails.application.routes.draw do
devise_for :users
#open to public
root 'welcome#index'
resources :guides, only: [:show], param: :username
resources :itineraries, only: [:index] #, only: [:index, :show]
authenticate :user, ->(u) { u.guide? } do
resources :guides, only: [:edit, :destroy], param: :username
get 'guide/dashboard', :to => 'guides#dashboard'
end
resources :locations, only: [:new, :create, :edit, :update, :destroy, :index, :show]
end
无论出于何种原因,引导个人资料显示/编辑工作正常;仪表板正常工作;但身份验证块之外的其他东西(行程和位置的资源)不工作,我重定向到设计的登录页面。它们是外部(和在一个案件以上)的身份验证块,不知道为什么,这与一些资源/途径,而不是别人发生。
您可以使用色器件的帮手。随着authenticate
,可以使资源和途径,将要求进行身份验证,他们可以访问之前。与authenticate
更换authenticated
导致资源根本无法使用,如果用户没有通过验证。两个助手采取可选的范围和块提供关于模型实例本身约束。
authenticate :user, ->(u) { u.guide? } do
get 'guide/dashboard', :to => 'guides#dashboard'
end
所以,你的问题是limit routes for certain resources based on the enum user type
。我建议你应该实现,而不是试图在你的路线,以创造更多的资源/范围的授权的东西,它的正确性。