Rails: ошибка маршрута при попытке обновить атрибут через link_to

ОШИБКА: нет маршрута [GET] "/bookings/:id/%3E:format"

Я хочу обновить атрибут при нажатии на ссылку 'link_to'..

<%= link_to 'Cancel', '/bookings/:id/(.:format)' %>

routes.rb

put '/bookings/:id/(.:format)' => "bookings#tocancel"
patch '/bookings/:id/(.:format)' => "bookings#tocancel"

контроллер

def tocancel
 @booking = Booking.find(params[:id])
 @booking.update_attribute(:status, "cancel")
 respond_to do |format|
  format.html { redirect_to @booking, notice: 'Booking was successfully cancelled.' }
  format.json { render :show, status: :ok, location: @booking }

конец

1 ответ

Решение

Создать метод в контроллере заказов как:

def tocancel
 @booking = Booking.find(params[:id])
 @booking.update_attribute(:status, "cancel")
 respond_to do |format|
  format.html { redirect_to @booking, notice: 'Booking was successfully cancelled.' }
  format.json { render :show, status: :ok, location: @booking }
 end
end

Маршруты для этого будут:

resources :bookings do
  member do
   get :tocancel
  end
end

Отмена ссылки может быть создана как:

link_to "Cancel", tocancel_booking_path(booking.id)

Здесь вы должны пройти booking_id, чтобы отменить ссылку. Теперь проверьте, как вы получаете booking_id на странице, где вы разместили эту ссылку отмены. Дайте мне знать, если возникнет проблема.

Другие вопросы по тегам