Перенаправьте ПАТЧ и ПОМЕСТИТЕ рельсы маршрута 5 для использования POST

#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, и ваш подход подошел бы для этого случая использования.