Я целый день изо всех сил пытался заставить мою кнопку работать.Это код в моем представлении индекса заказа:
<%= button_to("Remove", {:controller => "orders", :action => "update", :id => product.id}, :method => :patch) %>
мой контроллер:
def update
@order.products.delete(Product.find(@product.id))
@product.ordinable = true
@product.save
@order.amount = 0
@order.save
@order_amountnew = @order.amount
@order.products.each do |x|
@order_amountnew = @order_amountnew + x.price
end
@order.amount = @order_amountnew
@order.save
if @order.products.empty?
@order.destroy
end
redirect_to orders_url
end
и мои маршруты:
Rails.application.routes.draw do
root to: 'pages#home'
devise_for :users
resources :products
resources :orders, only: [:show, :create, :index, :destroy, :update]
post '/payment', action: :payorder, controller: 'orders'
patch '/orders', action: :update, controller: 'orders'
require "sidekiq/web"
authenticate :user, lambda { |u| u.admin } do
mount Sidekiq::Web => '/sidekiq'
end
end
Я пытался вызватькод внутри метода обновления, используя button_helper внутри моего индекса заказа.Я придумала это решение и неожиданно мой метод button_to теперь вызывает метод обновления, но только после того, как я потратил часы на поиск в Google и добавил к своим маршрутам следующую строку кода:
patch '/orders', action: :update, controller: 'orders'
Мой вопрос сейчас, всякий раз, когда яХотите вызвать метод с link_to или button_to, я должен создать маршрут для каждого метода, как это верно?В противном случае я получаю ошибку маршрутизации правильно?У меня есть это сомнение, потому что здесь:
resources :orders, only: [:show, :create, :index, :destroy, :update]
Я уже определил маршрут обновления для своего ресурса заказов, поэтому я не понимаю, почему мне нужно снова указать маршрут для метода crud, который я хочу использовать.Спасибо.