Я создал таблицу пользователей и внедрил Devise.Затем я добавил роль enum в таблицу пользователей, чтобы я мог идентифицировать администраторов, гидов и участников.
Я хотел бы ограничить маршруты для определенных ресурсов на основе типа пользователя enum.Я пробовал:
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
По какой-то причине, руководство профиля показывает / редактирует отлично;приборная панель работает нормально;но другие вещи за пределами блока проверки подлинности (ресурсы маршрутов и местоположений) не работают, я перенаправлен на страницу входа в Devise.Они находятся вне (и в одном случае выше) блока проверки подлинности, не зная, почему это происходит с некоторыми ресурсами / маршрутами, а не с другими.