Rails 5.2 Можно ли использовать маршруты для присвоения значений enum? - PullRequest
0 голосов
/ 16 марта 2019

Если, например, у меня есть модель User с двумя пользовательскими ролями:

enum role: {regular: 0, admin: 1}

Можно ли передать роль пользователя через помощника link_to?Вот пример:

<%= link_to "New Admin User", new_admin_user_path %>

Я понимаю, что это довольно надуманная концепция, но я бы хотел оставить контроллер как можно более универсальным.

1 Ответ

1 голос
/ 16 марта 2019

Как вы говорите, это довольно надумано, но возможно. Сначала создайте маршрут, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...