Как вы говорите, это довольно надумано, но возможно. Сначала создайте маршрут, используя scope
и :as
для каждой роли:
User.roles.keys.each do |role|
scope role, as: role do
resources :users
end
end
Ваши маршруты будут:
Prefix Verb URI Pattern Controller
new_regular_user GET /regular/users/new users#new
new_admin_user GET /admin/users/new users#new
Это позволяет вам
<%= link_to "New Admin User", new_admin_user_path %>
<%= link_to "New Regular User", new_regular_user_path %>
Шаблон URI содержит модель role
и user
, поэтому в вашем контроллере:
class UsersController < ApplicationController
def new
role, model = request.path.split("/")[1, 2] # ["", "admin", "user"]
@user = model.classify.constantize.new(role: role)
end
end