Как конвертировать Rails динамические маршруты для Rails 5.2 - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть старое Rails-приложение, которое начало свою жизнь в Rails 1.2. За прошедшие годы он был переведен в Rails 5.0

Файлways.rb содержит только две строки «подстановочных маршрутов» следующим образом

  match ':controller(/:action(/:id))',:constraints => {:controller => /admin\/[^\/]+/}, :via =>  :all
  match '/:controller(/:action(/:id))(.:format)', :via => :all

Ссылки в приложении кодируются в следующем примере:

<%= link_to('Marital Status', {:controller => 'marital_status', :action => 'list'})  %>

Похоже, этот маршрут устарел и будет удален в Rails 5.2

У меня вопрос: как я могу преобразовать маршруты во что-то, что приемлемо для Rails 5.2.

Имейте в виду, что приложение имеет около 150 контроллеров с соответствующим большим количеством действий.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Я нахожусь в аналогичной лодке, и на данный момент я поставил задачу rake, чтобы сгенерировать все маршруты и записать их в файл rout.rb.

Используя небольшое рубиновое метапрограммирование, довольно просто найти все методы, доступные классу <controller>.instance_methods, а затем отфильтровать все встроенные методы rails + те, что унаследованы от контроллера приложения.

Обновление:

Я использовал задачу rake для генерации маршрутов и поместил следующий код в конец файла маршрутов, чтобы регистрировать, когда маршрут не был найден в производстве:

match '/:controller(/:action(/:id))(.:format)', :via => :all, :to => proc { |env|
route = env["action_dispatch.request.path_parameters"]

Rails.logger.error("******************************************************************************************************")
Rails.logger.error("ROUTE NOT FOUND. USING WILDCARD ROUTE. REQUIRED ROUTE IS:>")
Rails.logger.error("#{env['REQUEST_METHOD'].downcase} #{route[:controller]}/#{route[:action]} => #{route[:controller]}##{route[:action]}")
Rails.logger.error("******************************************************************************************************")
controller = eval("#{route[:controller].camelize}Controller")
action = route[:action]
controller.action(action).call(env)}
0 голосов
/ 28 апреля 2018

Поскольку метод сопоставления устарел , используйте get для GET и post для POST.

например. get '/list', to: 'marital_status#list'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...