Имя псевдонима
Мне нужно, чтобы один путь был доступен через несколько имен. В моем 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.