#ruby-on-rails #ruby-on-rails-3.2 #rails-routing
#ruby-on-rails #ruby-on-rails-3.2 #рельсы-маршрутизация
Вопрос:
Определен следующий маршрут:
resources :products do
collection do
get :confirm
end
member do
put :confirmed
end
end
и rake:routes
возвращает:
confirmed_product PUT /products/:id/confirmed(.:format) products#confirmed
Контроллер имеет определенное действие:
def confirmed
@product = Product(params[:id])
@product.update_column(:paymentstate_id, "1")
render :action => "confirmed"
end
Помощник модели фактически определяет:
'http://' @site.host confirmed_product_path(@product)
Тем не менее, после публикации информации на этой странице (из внешнего источника, поскольку это возврат платежа при оформлении заказа) данные возвращаются в
[host]/products/2/confirmed
Но с ошибкой:
Unknown action
The action '2' could not be found for ProductsController
Я ожидал, что элемент ‘member’ позволил бы распознать 2 как id
и сгенерировать подтвержденное действие, как rake routes
свидетельствует.
Комментарии:
1. Убедитесь, что ваша форма выполняет PUT, а не POST, как по умолчанию, иначе ваш маршрут не будет сопоставлен.
2. хорошая мысль, я предполагал передачу данных как put. Маршрут теперь изменен и функционирует
3. Тогда я перенесу свой комментарий на ответ для вас 😉
Ответ №1:
Если URL-адрес правильный (если помощник генерирует URL-адрес, вы можете считать, что он будет правильным), но вы не можете каким-то образом получить к нему доступ, всегда проверяйте HTTP verb .
Кроме того, 'http://' @site.host confirmed_product_path(@product)
доступно в rails как confirmed_product_url(@product)
(обратите внимание _url
на конец).
Последнее, render action: 'foo'
может быть записано render 'foo'
Ответ №2:
Убедитесь, что ваша форма выполняет PUT, а не POST, как по умолчанию, иначе ваш маршрут не будет сопоставлен.