Вопрос: Настройка маршрутизации: есть ли способ удалить маршрут из Rails.application.routes? Route удалить все маршруты


Настройка маршрутизации: есть ли способ удалить маршрут из Rails.application.routes?

devise_for создает маршруты, включая маршрут DELETE, который мы хотим удалить, и devise_for не поддерживает :except или :only вариант.

Как я могу удалить маршрут из Rails.application.routes? Либо в draw блок или после?

Вот подробности об ошибке, которая была причиной, по которой нам нужно было удалить маршрут.

  • мы выдавали запрос DELETE к пользовательскому действию контроллера UJS

  • в действии контроллера мы снимали то, что хотели, а затем делали перенаправление 302. Это была плохая идея, и с тех пор мы исправили ее, вернув несколько JSON.

  • некоторые клиенты, получив 302, выдадут новый запрос DELETE для перенаправления, который направляется на маршрут удаления Devise! Таким образом, непреднамеренно удаляя человека! Хлоп. Мы предполагали, что это будет ПОЛУЧИТЬ. Плохое предположение.

Эта ошибка исправлена, но тем не менее я хотел бы удалить маршрут.

Вот что я сделал в конце, что было предложено победителем в его цитате из Хосе Валима:

В config/routes.rb, Я добавил это выше devise_for вызов, который устанавливает остальную часть моего 'people' маршруты:

delete '/person', :to => 'people#destroy'

Тогда в моем существующем people_controller.rb, Я добавил метод no-op:

def destroy render :nothing => true end

Я все еще немного раздражен, что нет простого способа просто удалить маршрут из RouteSet. Так же delete маршрут все еще существует для контроллера разработки, но он не будет вызван, потому что рельсы ищут первое совпадение в config/routes.rb и возвращает его.

Вот что сделал Хосе Валим (автор изобретения) должен сказать по этому вопросу :

Невозможно удалить маршруты по отдельности. Или вы используете: пропустите   удалите все и нарисуйте те, которые вам нужны вручную, или вы перезапишите это   маршрутов, определяя маршрут к одному и тому же пути сначала в вашей конфигурации /   routes.rb

Поэтому короткий ответ на ваш вопрос - нет, вы не можете удалить этот маршрут. Вы можете, конечно, попробовать сделать что-то вроде исправления метода devise_for, но это будет несколько связанное с этим мероприятие (день или несколько усилий). Я бы просто использовал опцию: skip, а затем реализовал маршруты, которые вы хотите для этого контроллера, и оставьте тот, который у вас нет.

Да, любопытное. Вы можете полностью перезаписать используемые контроллеры и написать свои собственные (наследуя Devise, если необходимо). Эта страница вики  может служить в качестве ориентира.

редактировать

Почему я сказал что-то вроде :)

Переопределение сеансов с использованием:

devise_for :users, :controllers => { :sessions => 'custom_devise/sessions'}, :skip => [:sessions] do get 'sign_in' => 'custom_devise/sessions#new', :as => :new_user_session post 'sign_in' => 'custom_devise/sessions#create', :as => :user_session end

даст вам только два маршрута [: get,: post], но не: destroy

new_user_session GET /sign_in(.:format) {:controller=>"custom_devise/sessions", :action=>"new"} user_session POST /sign_in(.:format) {:controller=>"custom_devise/sessions", :action=>"create"}

Таким образом, вы пропустите маршрут уничтожения / удаления. Теперь в контроллере вы можете пойти:

class SessionsController < Devise::SessionsController def new super end def create super end end

Теперь вы можете повторить процесс регистрации, паролей и разблокировок.

Второе редактирование

Ах, да, есть еще один, более простой способ. Вы можете вручную создавать маршруты ( документация ), используя devise_scope, также известный как «как» без переопределения:

as :user do get "sign_in", :to => "devise/sessions#new" post "sign_in", :to => "devise/sessions#create" ... end

дает:

sign_in GET /sign_in(.:format) {:controller=>"devise/sessions", :action=>"new"} POST /sign_in(.:format) {:controller=>"devise/sessions", :action=>"create"}

Третье редактирование

Кроме того, вы можете перезаписать часть разработки  отвечающий за создание этих маршрутов (только для использования в приложениях, которые не будут разрабатывать «уничтожить» маршрут вообще), создав инициализатор:

module ActionDispatch::Routing extend ActionDispatch::Routing class Mapper protected def devise_session(mapping, controllers) #:nodoc: resource :session, :only => [], :controller => controllers[:sessions], :path => "" do get :new, :path => mapping.path_names[:sign_in], :as => "new" post :create, :path => mapping.path_names[:sign_in] end end def devise_registration(mapping, controllers) #:nodoc: path_names = { :new => mapping.path_names[:sign_up], :cancel => mapping.path_names[:cancel] } resource :registration, :only => [:new, :create, :edit, :update], :path => mapping.path_names[:registration], :path_names => path_names, :controller => controllers[:registrations] do get :cancel end end end end

Обратите внимание, что это исправление удаляет все уничтожают  маршруты, используемые в Devise (в «сеансах» и «регистрации» всего два, и это исправление только для этого конкретного случая.

К тому же

Вы также можете добавить: кроме опции для маршрутов. Чтобы сделать это, вы должны добавить devise_for метод ( скопируйте его из оригинала  и модифицируйте в соответствии с вашими пожеланиями) к классу Mapper, поэтому он отправляет член [: except] к указанным выше (в коде) частным методам. Затем вы должны изменить их для добавления маршрутов на основе условий.

Самый быстрый, грязный способ: добавить @scope [: except] = options [: except], а затем изменить частные методы, чтобы исключить хэш (если вы решили иметь мелкозернистый контроль маршрута, например: :except => {:sessions => [:destroy]}, что делает :skip устаревший) или массив (если вы хотите удалить это конкретное действие со всех маршрутов, например: :except => [:destroy]) проверяется перед добавлением маршрута.

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

На самом деле devise_for поддерживает :skip а также :only, например ( документы ):

devise_for :user, :skip => :registration

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

ОБНОВИТЬ:

Другим возможным решением является использование Rails ' расширенные ограничения  чтобы полностью заблокировать нежелательный маршрут:

# config/routes.rb constraints lambda {|req| req.url =~ /users/ && req.delete? ? false : true} do devise_for :users end

Вот сообщение об использовании lambdas для ограничений маршрута , Объект запроса объясняется Вот , Это может быть самым простым решением.

Я нашел простое решение с Devise 4.2.0 и Rails 5.0.1. я думать  это будет работать с Rails 4, и я не уверен в более старых версиях Devise.

Создайте инициализатор, переопределяющий devise_* помощники маршрута. Примеры методов devise_session, devise_password, devise_confirmation, devise_unlock, а также devise_registration, Проверьте источник ,

Убедитесь, что инициализатор загружен после инициализатора Devise, указав имя файла более крупным буквенно-цифровым значением.

Например, Devise создает маршрут подтверждения: :new, :create, а также :show действия. Я хочу, чтобы :create действие.

# config/initializers/devise_harden.rb module ActionDispatch::Routing class Mapper # Override devise's confirmation route setup, as we want to limit it to :create def devise_confirmation(mapping, controllers) resource :confirmation, only: [:create], path: mapping.path_names[:confirmation], controller: controllers[:confirmations] end end end

Теперь POST /auth/confirmation это единственная настройка маршрута для подтверждения.

programmerz.ru

Как удалить статические маршруты. Как добавить маршрут в Windows 10, 8, 7

Как удалить статические маршруты. Как добавить маршрут в Windows 10, 8, 7

Хочется также сказать о том, что если вы не уверены в своих знаниях, лучше не изменять данные настройки. Т.к. при неправильном использовании маршрутизации вы можете оставить ваш компьюетр без доступа к сети Интернет.

Просмотр маршрутов

Наберите команду

route print

Удаление всех статических маршрутов:

route -f

Добавление статического маршрута:

route -p add 0.0.0.0 mask 0.0.0.0 192.168.95.1 Удаляем все маршруты: route -f

После того, как все маршруты стёрты, естественно пропадёт Интернет. Для того, чтобы он появился вновь, необходимо задать маршрут по умолчанию. Добавляем постоянный маршрут к шлюзу:

 

route -p add 0.0.0.0 0.0.0.0 192.168.10.254 OK

В Windows XP/2003 Server после этого появится Интернет. Но если у вас Windows 7/8.1/или 2008/2012 Server, необходимо также выполнить команды:

ipconfig /release ipconfig /renew

Как удалённо очистить таблицу маршрутов

Если вы хотите проделать все эти операции удалённо, вам понадобится программа NetAdapter Repair. Дело в том, что после применения команды route -f соединение с сервером будет утрачено. А утилита NetAdapter Repair автоматически перезагрузит компьютер после очистки таблицы маршрутов. Для удалённой очистки необходимо проделать следующие действия:

1 Запустить утилиту NetAdapter Repair от имени Администратора.

2 Установить флажок возле пункта Clear ARP/Route Table.

3 Нажать кнопку Run All Selected:

После выполнения операции пойдёт обратный отсчёт времени и компьютер (сервер) перезагрузится автоматически:

globalbt.ru

WindowsFAQ.ru

Выводит на экран и изменяет записи в локальной таблице IP-маршрутизации. Запущенная без параметров, команда route выводит справку.

Синтаксис

route [-f] [-p] [команда [конечная_точка] [mask маска_сети] [шлюз] [metric метрика]] [if интерфейс]]

Параметры
-f Очищает таблицу маршрутизации от всех записей, которые не являются узловыми маршрутами (маршруты с маской подсети 255.255.255.255), сетевым маршрутом замыкания на себя (маршруты с конечной точкой 127.0.0.0 и маской подсети 255.0.0.0) или маршрутом многоадресной рассылки (маршруты с конечной точкой 224.0.0.0 и маской подсети 240.0.0.0). При использовании данного параметра совместно с одной из команд (таких, как add, change или delete) таблица очищается перед выполнением команды. -p При использовании данного параметра с командой add указанный маршрут добавляется в реестр и используется для инициализации таблицы IP-маршрутизации каждый раз при запуске протокола TCP/IP. По умолчанию добавленные маршруты не сохраняются при запуске протокола TCP/IP. При использовании параметра с командой print выводит на экран список постоянных маршрутов. Все другие команды игнорируют этот параметр. Постоянные маршруты хранятся в реестре по адресу HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes команда Указывает команду, которая будет запущена на удаленной системе. В следующей таблице представлен список допустимых параметров.

Команда

Назначение

add

Добавление маршрута

change

Изменение существующего маршрута

delete

Удаление маршрута или маршрутов

print

Печать маршрута или маршрутов

конечная_точка Определяет конечную точку маршрута. Конечной точкой может быть сетевой IP-адрес (где разряды узла в сетевом адресе имеют значение 0), IP-адрес маршрута к узлу, или значение 0.0.0.0 для маршрута по умолчанию. mask маска_сети Указывает маску сети (также известной как маска подсети) в соответствии с точкой назначения. Маска сети может быть маской подсети соответствующей сетевому IP-адресу, например 255.255.255.255 для маршрута к узлу или 0.0.0.0. для маршрута по умолчанию. Если данный параметр пропущен, используется маска подсети 255.255.255.255. Конечная точка не может быть более точной, чем соответствующая маска подсети. Другими словами, значение разряда 1 в адресе конечной точки невозможно, если значение соответствующего разряда в маске подсети равно 0. шлюз Указывает IP-адрес пересылки или следующего перехода, по которому доступен набор адресов, определенный конечной точкой и маской подсети. Для локально подключенных маршрутов подсети, адрес шлюза — это IP-адрес, назначенный интерфейсу, который подключен к подсети. Для удаленных маршрутов, которые доступны через один или несколько маршрутизаторов, адрес шлюза — непосредственно доступный IP-адрес ближайшего маршрутизатора. metric метрика Задает целочисленную метрику стоимости маршрута (в пределах от 1 до 9999) для маршрута, которая используется при выборе в таблице маршрутизации одного из нескольких маршрутов, наиболее близко соответствующего адресу назначения пересылаемого пакета. Выбирается маршрут с наименьшей метрикой. Метрика отражает количество переходов, скорость прохождения пути, надежность пути, пропускную способность пути и средства администрирования. if интерфейс Указывает индекс интерфейса, через который доступна точка назначения. Для вывода списка интерфейсов и их соответствующих индексов используйте команду route print. Значения индексов интерфейсов могут быть как десятичные, так и шестнадцатеричные. Перед шестнадцатеричными номерами вводится 0х. В случае, когда параметр if пропущен, интерфейс определяется из адреса шлюза. /? Отображает справку в командной строке.
Примечания
  • Большие значения в столбце metric таблицы маршрутизации — результат возможности протокола TCP/IP автоматически определять метрики маршрутов таблицы маршрутизации на основании конфигурации IP-адреса, маски подсети и стандартного шлюза для каждого интерфейса ЛВС. Автоматическое определение метрики интерфейса, включенное по умолчанию, устанавливает скорость каждого интерфейса и метрики маршрутов для каждого интерфейса так, что самый быстрый интерфейс создает маршруты с наименьшей метрикой. Чтобы удалить большие метрики, отключите автоматическое определение метрики интерфейса в дополнительных свойствах протокола TCP/IP для каждого подключения по локальной сети.
  • Имена могут использоваться для параметра конечная_точка, если существует соответствующая запись в файле базы данных Networks, находящемся в папке системный_корневой_каталог\System32\Drivers\Etc. В параметре шлюз можно указывать имена до тех пор, пока они разрешаются в IP-адреса с помощью стандартных способов разрешения узлов, таких как запрос службы DNS, использование локального файла Hosts, находящегося в папке системный_корневой_каталог\system32\drivers\etc, или разрешение имен NetBIOS.
  • Если команда — print или delete, параметр шлюз опускается и используются подстановочные знаки для указания точки назначения и шлюза. Значение конечной_точки может быть подстановочным значением, которое указывается звездочкой (*). При наличии звездочки (*) или вопросительного знака (?) в описании конечной точки, они рассматриваются как подстановки, тогда печатаются или удаляются только маршруты, соответствующие точке назначения. Звездочка соответствует любой последовательности символов, а вопросительный знак — любому одному символу. 10.*.1, 192.168.*, 127.* и *224* являются допустимыми примерами использования звездочки в качестве подстановочного символа.
  • При использовании недопустимой комбинации значений конечной точки и маски подсети (маски сети) выводится следующее сообщение об ошибке : «Маршрут: неверная маска подсети адреса шлюза». Ошибка появляется, когда одно или несколько значений разрядов в адресе конечной точки равно 1, а значения соответствующих разрядов маски подсети — 1. Для проверки этого состояния выразите конечную точку и маску подсети в двоичном формате. Маска подсети в двоичном формате состоит из последовательности единичных битов, представляющей часть сетевого адреса конечной точки, и последовательности нулевых битов, обозначающей часть адреса узла конечной точки. Проверьте наличие единичных битов в части адреса точки назначения, которая является адресом узла (как определено маской подсети).
  • Параметр -p поддерживается в команде route только в операционных системах Windows NT 4.0, Windows 2000, Windows Millennium Edition и Windows XP. Этот параметр не поддерживается командой route в системах Windows 95 и Windows 98.
  • Эта команда доступна, только если в свойствах сетевого адаптера в объекте Сетевые подключения в качестве компонента установлен протокол Интернета (TCP/IP).
Примеры

Чтобы вывести на экран все содержимое таблицы IP-маршрутизации, введите команду:

route print

Чтобы вывести на экран маршруты из таблицы IP-маршрутизации, которые начинаются с 10., введите команду:

route print 10.*

Чтобы добавить маршрут по умолчанию с адресом стандартного шлюза 192.168.12.1, введите команду:

route add 0.0.0.0 mask 0.0.0.0 192.168.12.1

Чтобы добавить маршрут к конечной точке 10.41.0.0 с маской подсети 255.255.0.0 и следующим адресом перехода 10.27.0.1, введите команду:

route add 10.41.0.0 mask 255.255.0.0 10.27.0.1

Чтобы добавить постоянный маршрут к конечной точке 10.41.0.0 с маской подсети 255.255.0.0 и следующим адресом перехода 10.27.0.1, введите команду:

route -p add 10.41.0.0 mask 255.255.0.0 10.27.0.1

Чтобы добавить маршрут к конечной точке 10.41.0.0 с маской подсети 255.255.0.0 и следующим адресом перехода 10.27.0.1 и метрикой стоимости 7, введите команду:

route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 metric 7

Чтобы добавить маршрут к конечной точке 10.41.0.0 с маской подсети 255.255.0.0 и следующим адресом перехода 10.27.0.1 и использованием индекса интерфейса 0х3, введите команду:

route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 if 0x3

Чтобы удалить маршрут к конечной точке 10.41.0.0 с маской подсети 255.255.0.0, введите команду:

route delete 10.41.0.0 mask 255.255.0.0

Чтобы удалить все маршруты из таблицы IP-маршрутизации, которые начинаются с 10., введите команду:

route delete 10.*

Чтобы изменить следующий адрес перехода для маршрута с конечной точкой 10.41.0.0 и маской подсети 255.255.0.0 с 10.27.0.1 на 10.27.0.25, введите команду:

route change 10.41.0.0 mask 255.255.0.0 10.27.0.25

www.windowsfaq.ru

Как удалять определенную запись из таблицы маршрутизации? Вот таблица:

Активные маршруты:Сетевой адрес Маска сети Адрес шлюза Интерфейс Метриках 0.0.0.0 0.0.0.0 10.64.126.1 10.64.126.116 20х 0.0.0.0 0.0.0.0 10.64.126.1 10.64.126.73 20 0.0.0.0 0.0.0.0 172.27.164.35 172.27.164.35 1х 10.8.0.1 255.255.255.255 10.64.126.1 10.64.126.73 1 10.8.0.1 255.255.255.255 10.64.126.1 10.64.126.116 1 10.8.3.1 255.255.255.255 10.64.126.1 10.64.126.116 1x 10.8.3.1 255.255.255.255 10.64.126.1 10.64.126.73 1 10.64.126.0 255.255.255.0 10.64.126.73 10.64.126.73 20x? 10.64.126.0 255.255.255.0 10.64.126.116 10.64.126.116 20 10.64.126.73 255.255.255.255 127.0.0.1 127.0.0.1 20 10.64.126.116 255.255.255.255 127.0.0.1 127.0.0.1 20 10.255.255.255 255.255.255.255 10.64.126.73 10.64.126.73 20x? 10.255.255.255 255.255.255.255 10.64.126.116 10.64.126.116 20 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 172.27.164.35 255.255.255.255 127.0.0.1 127.0.0.1 50 172.27.255.255 255.255.255.255 172.27.164.35 172.27.164.35 50x 224.0.0.0 240.0.0.0 10.64.126.73 10.64.126.73 20 224.0.0.0 240.0.0.0 10.64.126.116 10.64.126.116 20 224.0.0.0 240.0.0.0 172.27.164.35 172.27.164.35 1 255.255.255.255 255.255.255.255 10.64.126.73 10.64.126.73 1x 255.255.255.255 255.255.255.255 10.64.126.116 10.64.126.116 1

нужно удалить маршруты обозначенные в начале крестиком (x).

в route /? я не понял как удалять определенные маршруты, т.к. там написанно:

> route PRINT> route DELETE 157.0.0.0> route PRINT

route delete - например я захочу удалить маршрутх 0.0.0.0 0.0.0.0 10.64.126.1 10.64.126.116 20

что, я буду писать route delete 0.0.0.0?по логике то он тогда удалит все маршруты начинающиеся на 0.0.0.0, а мне так не надо.

Пожалуйста помогите!

Дополнен 11 лет назад

а как можно указать интерфейс, я что-то не понял, там написанно надо дописывать if - интерфейс, но я пробую писать IP интерфейса, он пишет: маршрут не найден, а когда вообще интерфейс не указываю, удаляются сразу 2 маршрута, с разными интерфейсами, но с теми же параметрами

otvet.mail.ru

Настройка маршрутизации: есть ли способ удалить маршрут из Rails.application.routes?

devise_for создает маршруты, включая маршрут DELETE, который мы хотим удалить, и devise_for не поддерживает :except или :only вариант.

Как я могу удалить маршрут из Rails.application.routes? Либо в draw блок или после?

Вот подробности об ошибке, которая была причиной, по которой нам нужно было удалить маршрут.

  • мы выдавали запрос DELETE к пользовательскому действию контроллера UJS

  • в действии контроллера мы снимали то, что хотели, а затем делали перенаправление 302. Это была плохая идея, и с тех пор мы исправили ее, вернув несколько JSON.

  • некоторые клиенты, получив 302, выдадут новый запрос DELETE для перенаправления, который направляется на маршрут удаления Devise! Таким образом, непреднамеренно удаляя человека! Хлоп. Мы предполагали, что это будет ПОЛУЧИТЬ. Плохое предположение.

Эта ошибка исправлена, но тем не менее я хотел бы удалить маршрут.

Вот что я сделал в конце, что было предложено победителем в его цитате из Хосе Валима:

В config/routes.rb, Я добавил это выше devise_for вызов, который устанавливает остальную часть моего 'people' маршруты:

delete '/person', :to => 'people#destroy'

Тогда в моем существующем people_controller.rb, Я добавил метод no-op:

def destroy render :nothing => true end

Я все еще немного раздражен, что нет простого способа просто удалить маршрут из RouteSet. Так же delete маршрут все еще существует для контроллера разработки, но он не будет вызван, потому что рельсы ищут первое совпадение в config/routes.rb и возвращает его.

Вот что сделал Хосе Валим (автор изобретения) должен сказать по этому вопросу :

Невозможно удалить маршруты по отдельности. Или вы используете: пропустите   удалите все и нарисуйте те, которые вам нужны вручную, или вы перезапишите это   маршрутов, определяя маршрут к одному и тому же пути сначала в вашей конфигурации /   routes.rb

Поэтому короткий ответ на ваш вопрос - нет, вы не можете удалить этот маршрут. Вы можете, конечно, попробовать сделать что-то вроде исправления метода devise_for, но это будет несколько связанное с этим мероприятие (день или несколько усилий). Я бы просто использовал опцию: skip, а затем реализовал маршруты, которые вы хотите для этого контроллера, и оставьте тот, который у вас нет.

Да, любопытное. Вы можете полностью перезаписать используемые контроллеры и написать свои собственные (наследуя Devise, если необходимо). Эта страница вики  может служить в качестве ориентира.

редактировать

Почему я сказал что-то вроде :)

Переопределение сеансов с использованием:

devise_for :users, :controllers => { :sessions => 'custom_devise/sessions'}, :skip => [:sessions] do get 'sign_in' => 'custom_devise/sessions#new', :as => :new_user_session post 'sign_in' => 'custom_devise/sessions#create', :as => :user_session end

даст вам только два маршрута [: get,: post], но не: destroy

new_user_session GET /sign_in(.:format) {:controller=>"custom_devise/sessions", :action=>"new"} user_session POST /sign_in(.:format) {:controller=>"custom_devise/sessions", :action=>"create"}

Таким образом, вы пропустите маршрут уничтожения / удаления. Теперь в контроллере вы можете пойти:

class SessionsController < Devise::SessionsController def new super end def create super end end

Теперь вы можете повторить процесс регистрации, паролей и разблокировок.

Второе редактирование

Ах, да, есть еще один, более простой способ. Вы можете вручную создавать маршруты ( документация ), используя devise_scope, также известный как «как» без переопределения:

as :user do get "sign_in", :to => "devise/sessions#new" post "sign_in", :to => "devise/sessions#create" ... end

дает:

sign_in GET /sign_in(.:format) {:controller=>"devise/sessions", :action=>"new"} POST /sign_in(.:format) {:controller=>"devise/sessions", :action=>"create"}

Третье редактирование

Кроме того, вы можете перезаписать часть разработки  отвечающий за создание этих маршрутов (только для использования в приложениях, которые не будут разрабатывать «уничтожить» маршрут вообще), создав инициализатор:

module ActionDispatch::Routing extend ActionDispatch::Routing class Mapper protected def devise_session(mapping, controllers) #:nodoc: resource :session, :only => [], :controller => controllers[:sessions], :path => "" do get :new, :path => mapping.path_names[:sign_in], :as => "new" post :create, :path => mapping.path_names[:sign_in] end end def devise_registration(mapping, controllers) #:nodoc: path_names = { :new => mapping.path_names[:sign_up], :cancel => mapping.path_names[:cancel] } resource :registration, :only => [:new, :create, :edit, :update], :path => mapping.path_names[:registration], :path_names => path_names, :controller => controllers[:registrations] do get :cancel end end end end

Обратите внимание, что это исправление удаляет все уничтожают  маршруты, используемые в Devise (в «сеансах» и «регистрации» всего два, и это исправление только для этого конкретного случая.

К тому же

Вы также можете добавить: кроме опции для маршрутов. Чтобы сделать это, вы должны добавить devise_for метод ( скопируйте его из оригинала  и модифицируйте в соответствии с вашими пожеланиями) к классу Mapper, поэтому он отправляет член [: except] к указанным выше (в коде) частным методам. Затем вы должны изменить их для добавления маршрутов на основе условий.

Самый быстрый, грязный способ: добавить @scope [: except] = options [: except], а затем изменить частные методы, чтобы исключить хэш (если вы решили иметь мелкозернистый контроль маршрута, например: :except => {:sessions => [:destroy]}, что делает :skip устаревший) или массив (если вы хотите удалить это конкретное действие со всех маршрутов, например: :except => [:destroy]) проверяется перед добавлением маршрута.

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

На самом деле devise_for поддерживает :skip а также :only, например ( документы ):

devise_for :user, :skip => :registration

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

ОБНОВИТЬ:

Другим возможным решением является использование Rails ' расширенные ограничения  чтобы полностью заблокировать нежелательный маршрут:

# config/routes.rb constraints lambda {|req| req.url =~ /users/ && req.delete? ? false : true} do devise_for :users end

Вот сообщение об использовании lambdas для ограничений маршрута , Объект запроса объясняется Вот , Это может быть самым простым решением.

Я нашел простое решение с Devise 4.2.0 и Rails 5.0.1. я думать  это будет работать с Rails 4, и я не уверен в более старых версиях Devise.

Создайте инициализатор, переопределяющий devise_* помощники маршрута. Примеры методов devise_session, devise_password, devise_confirmation, devise_unlock, а также devise_registration, Проверьте источник ,

Убедитесь, что инициализатор загружен после инициализатора Devise, указав имя файла более крупным буквенно-цифровым значением.

Например, Devise создает маршрут подтверждения: :new, :create, а также :show действия. Я хочу, чтобы :create действие.

# config/initializers/devise_harden.rb module ActionDispatch::Routing class Mapper # Override devise's confirmation route setup, as we want to limit it to :create def devise_confirmation(mapping, controllers) resource :confirmation, only: [:create], path: mapping.path_names[:confirmation], controller: controllers[:confirmations] end end end

Теперь POST /auth/confirmation это единственная настройка маршрута для подтверждения.

programmerz.ru

Плавающие статические маршруты и маршрут удаления

Плавающий статический маршрут является резервным маршрутом к маршруту, который является или динамическим маршрутом или другим статическим маршрутом.

Административное расстояние по умолчанию статического маршрута равняется "1". Можно создать статический маршрут, используя другой интерфейс выхода или IP-адрес следующего транзитного участка, который был бы добавлен к таблице маршрутизации, только если основной статический маршрут перестал работать.

Для этого надо вспомнить, что если у маршрутизатора будет два маршрута к той же самой целевой сети с двумя различными значениями административного расстояния, то он добавит маршрут с более низким административным расстоянием. Статический маршрут будет удален из таблицы маршрутизации, если IP-адрес интерфейса выхода или следующего транзитного участка больше не будет доступен.

Маршрут Удаления

У общей конфигурации во многих сетях должен быть статический маршрут по умолчанию на граничном маршрутизаторе, передающем пакеты к ISP. У маршрутизатора ISP тогда есть статический маршрут, указывающий на сеть клиента.

Например, у Клиента A есть сетевой адрес 172.16.0.0/16, который разделен на несколько подсетей /24. У граничного маршрутизатора Клиента A есть статический маршрут по умолчанию, передающий весь другой трафик к маршрутизатору ISP:

ip route 0.0.0.0 0.0.0.0 serial 0/0/0

У маршрутизатора ISP есть статический маршрут по умолчанию для того, чтобы передавать трафик к сети Клиента A:

ip route 172.16.0.0 255.255.0.0 serial 0/0/1

Проблема может произойти, когда пакеты порождаются из сети Клиента A для подсети, которая не существует. Граничный маршрутизатор клиента A будет использовать свой маршрут по умолчанию, чтобы передавать те пакеты на ISP, маршрутизатор ISP получит те пакеты и отошлет их назад к граничному маршрутизатору Клиента A, потому что они - часть сети 172.16.0.0/16, граничный маршрутизатор еще раз отошлет их назад к ISP. Пакеты будут передаваться туда-сюда, пока TTL пакета не истекает.

Для выхода из положения можно сконфигурировать статический маршрут удаления на граничном маршрутизаторе Клиента A, который будет отбрасывать эти пакеты вместо того, чтобы передавать их на маршрутизатор ISP.

Далее: Результат отключения автосуммирования EIGRP

marshrutizatciia.ru