Имя псевдонима

Мне нужно, чтобы один путь был доступен через несколько имен. В моем routes.rb я сделал

get '/route' => 'controller#edit', :as => 'name_a'
get '/route' => 'controller#edit', :as => 'name_b'

Это работает красиво, но загружает таблицу маршрутов ни для чего. Из моего понимания документации :as определяет вспомогательный метод при вызове.

Итак, я пошел в мой ApplicationController и добавил

alias_method :name_b, :name_a

и я удалил вторую строку из routes.rb

но с ошибкой Uncaught exception: undefined method name_a for class ApplicationController

есть ли правильный способ иметь два имени для одного пути?

================= EDIT ==================== Разработка:

Я использую Devise gem для управления сеансом, регистрации, блокировки и т.д. из 2-х видов пользователей, позвоните им Admin и Guest. Драгоценный камень очень хорошо вставлен, но он просит правильные имена маршрутов вести себя правильно.

В моем случае, что касается разработки, только процесс регистрации отличается, поэтому я пытаюсь создать структуру, которая выглядит следующим образом:

app
  controllers
    users
        admin
            registration_controller.rb
        guest
            registration_controller.rb
        session_controller.rb
        password_controller.rb
        registration_controller.rb

контроллеры Admin и Guest наследуют от указанного регистрационного_контроллера, которые наследуют от Devise.

Теперь, чтобы нормально работать, Devise нуждается, например, в именах guest_user_password и admin_user_password, чтобы создавать или удалять извлечения пароля. В моем случае оба находятся под одним и тем же путем, поэтому я хочу, чтобы оба имени перенаправлялись к одному и тому же контроллеру "пользователи/пароль".

Что еще важнее, и почему я действительно хотел сфальсифицировать. Является ли то, что мои взгляды не заботятся о том, работает ли он с маршрутами Admin и Guest при перенаправлении на контроллер поиска паролей. Оба пользователя, поэтому я хочу использовать user_password для обоих.

Отсюда мой вопрос.:)

Также обратите внимание, что, как я ее написал, все работает. Я просто пытаюсь получить "самый элегантный способ" его написания.

Ответ 1

Как добавить псевдоним в свой ApplicationController?

class ApplicationController < ActionController::Base

alias_method :route_new, :route_old
helper_method :route_new

Помните, что сначала это имя, затем старое имя.

Запрос helper_method предназначен для использования в ваших представлениях, а не только для контроллеров.

Если вам нравится, вы можете разместить его в включенном модуле, называемом "RouteAliases"

Ответ 2

Вы можете добавить что-то вроде этого к routes.rb:

Rails.application.routes.draw do

  ...

  Rails.application.routes.named_routes.tap do |named_routes|
    named_routes['new_name'] = named_routes['real_name']
  end
end

Это создаст помощники new_name_path и new_name_url. Я тестировал это с помощью Rails 5.0.6.