#ruby-on-rails #ruby #routes #ruby-on-rails-5
Вопрос:
В настоящее время я добавляю правильные маршруты в устаревшее приложение rails, похоже, я не могу использовать маршруты ИСПРАВЛЕНИЙ, РАЗМЕЩЕНИЯ и УДАЛЕНИЯ, поскольку в настоящее время приложение работает только на основе маршрутов GET и POST.
Поэтому я реализовал маршруты ОТДЫХА, но на данный момент мне нужно перенаправить ПАТЧ, ПОМЕСТИТЬ и УДАЛИТЬ до тех пор, пока мы не сможем изменить его, чтобы использовать правильную маршрутизацию.
Вот что я получаю при обновлении:
Это маршруты для пользовательских полей# custom_fields
resources :custom_fields, except: %i[show destroy] do
get :disable, on: :member
collection do
get :list
get :edit
get :disable
get :enable
get :order_fields
post :process_order_fields
end
end
# remap wrong implmentation of paths
get '/custom_fields/edit/:id', to: redirect('/custom_fields/%{id}/edit')
Я попробовал следующее
post '/custom_fields/:id', to: redirect(custom_field_path(id: %{id}))
но никаких костей.
Ответ №1:
Я не понимаю вашего вопроса. Зачем вам «нужно» добавлять эти перенаправления?
Если вы хотите определить устаревший POST
маршрут , например post '/custom_fields/:id'
, но внутренне заставить его выполнять то же действие, PUT/PATCH
что и запрос, не являющийся устаревшим, просто определите его как таковой:
resources :custom_fields, except: %i[show destroy] do
post :update, on: :member
# ...
end
Более того, неверно определять это как перенаправление, как вы пытались, в соответствии со спецификацией HTTP:
Если код состояния 302 получен в ответ на запрос, отличный от GET или HEAD, агент пользователя НЕ ДОЛЖЕН автоматически перенаправлять запрос, если он не может быть подтвержден пользователем, поскольку это может изменить условия, при которых был выдан запрос.
Комментарии:
1. Ах, хорошо, это работает, спасибо, что касается того, как я делаю перенаправление, это следующие документы rails edgeguides.rubyonrails.org/routing.html#redirection
2.
GET --> GET
Перенаправление совершенно нормально/нормально в соответствии со спецификацией HTTP, и ваш подход подошел бы для этого случая использования.