Ruby on Rails - Изменить действие обновления - PullRequest
0 голосов
/ 24 августа 2018

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

routes.rb:

resource :guide_dog_forms

get '/cao-guia/:id/editar', to: 'guide_dog_forms#edit', as: :edit_guide_dog_form
put '/cao-guia/:id/', to: 'guide_dog_forms#update'

После этого я отредактировал свои контроллеры и добавил следующие действия:

class GuideDogFormsController < ApplicationController

  def create
    @contact = GuideDogForm.new(params[:contact])
    if @contact.save
      GuideDogMailer.delay_for(10.seconds, retry: true).create(@contact)
      render nothing: true, status: 200
    else
      render nothing: true, status: 400
    end
  end

  def edit
    @guidedoguser = GuideDogForm.find(params[:id])
  end

  def update
    @guidedoguser = GuideDogForm.find(params[:id])
    @guidedoguser.update(name: params[:name], email: params[:email])
    redirect_to guide_dog_form_path(@guidedoguser)
  end

end

Мои текущие рейк-маршруты такие:

guide_dog_forms POST - /guide_dog_forms(.:format) - guide_dog_forms#create
new_guide_dog_forms GET - /guide_dog_forms/new(.:format) - guide_dog_forms#new
edit_guide_dog_forms GET - /guide_dog_forms/edit(.:format) - guide_dog_forms#edit
GET - /guide_dog_forms(.:format) - guide_dog_forms#show
PATCH - /guide_dog_forms(.:format) - guide_dog_forms#update
PUT - /guide_dog_forms(.:format) - guide_dog_forms#update
DELETE - /guide_dog_forms(.:format) - guide_dog_forms#destroy

Когда я отправляю свою форму редактирования, отображается URL-адрес localhost:3000/guide_dog_forms.80 (80 - это идентификатор формы, которую я пытаюсь отредактировать), а не тот, который я определил на своих маршрутах. Почему это происходит? Кто-нибудь может мне помочь? Спасибо.

1 Ответ

0 голосов
/ 24 августа 2018

Это побочный продукт ваших resource маршрутов.

Попробуйте запустить rake routes. Там вы должны увидеть маршрут guide_dog_form_path с выводом /guide_dog_form/:id, который объясняет перенаправление. Возможно, вам придется настроить другой именованный маршрут и перенаправить туда, если вы хотите переопределить поведение метода resource.

Обычно вы передаете единственную версию объекта в resource. то есть resource :guide_dog_form или множественное число к resources. т.е. resources :guide_dog_forms

Исходя из предоставленного вами кода, я предполагаю, что ваше намерение: resources :guide_dog_forms

* FWIW, с Rails 4 для обновления записей обычно используется глагол PATCH вместо PUT.

...