Ошибка маршрутизации! "ActionController::RoutingError (Нет подходящих маршрутов [PATCH]"

Когда пользователь нажимает кнопку отправить с этой _form:

<%= simple_form_for(@routine, url: create_freebie_routine_path(params[:id])) do |f| %>

  <%= f.date_select %>

<% end %>

Он получает эту ошибку: ActionController::RoutingError (No route matches [PATCH] "/routines/2/create_freebie")

Я не могу понять, как это исправить. Идея состоит в том, что пользователь отправит вышеуказанную форму с введенным freebie_date а затем контроллер добавит +1 freebie через create_freebie действие в обновленном @routine

маршруты

  resources :routines do
    member do
      get :new_freebie
      post :create_freebie
    end
  end

routines_controller

  def new_freebie
    @routine = current_user.routines.find(params[:id])
    @routine.freebie_date = Date.yesterday
    respond_modal_with @routine
  end

  def create_freebie
    @routine = current_user.routines.find(params[:id])
    @routine.freebie = @routine.freebie + 1
    @routine.save
    respond_modal_with @routine, location: root_path
    flash[:alert] = 'Freebie added'
  end

Спасибо за вашу помощь!

1 ответ

Решение

Вам придется заменить это

  resources :routines do
    member do
      get :new_freebie
      post :create_freebie
    end
  end

с:

  resources :routines do
    member do
      get :new_freebie
      patch :create_freebie
    end
  end

Обратите внимание на изменение от post в patch


Другое решение состоит в том, чтобы указать method в post в форме без изменения вашего routes:

<%= simple_form_for @routine, url: create_freebie_routine_path(params[:id]), method: :post do |f| %>

  <%= f.date_select %>

<% end %>
Другие вопросы по тегам