#ruby_on_rails
Пытаюсь создать процесс оформления заказа в интернет магазине. Пользователь открывает
корзину (объект Cart), в которой видны товары (объекты LineItem). Вместе с этим сразу
же создается объект Order, в который будет записан готовый заказ.
Так выглядит Client::CartsController:
def index
if @cart.nil? || @cart.line_items.count == 0
empty_cart
else
@order = Order.new
@cart = @cart.line_items.includes(:item)
end
end
Так выглядит сама корзина:
= simple_form_for [:client, @order], url: client_orders_path, method: :post, action:
'create' do |f|
- if user_signed_in?
= f.input :user_id, as: :hidden, input_html: { value: current_user.id }
%table.table.table-hover.table-bordered#cartTable{ 'data-attr_id' => session[:cart_id] }
Здесь в таблице описание заказов
= f.input :address
= f.input :phone_num, as: :tel
- if user_signed_in?
= f.button :submit, 'Оформить заказ', class: 'btn-primary'
Далее, по нажатию кнопки "Оформить заказ" форма должна уходить в контроллер Client::OrdersController,
но я вижу такую ошибку:
No route matches [PUT] "/client/orders".
Вот файл routes.rb
Rails.application.routes.draw do
scope 'admin' do
devise_for :admins, :controllers => {
:confirmations => 'admin/admins/confirmations',
# :omniauth_callbacks => 'admin/admins/omniauth_callbacks',
:passwords => 'admin/admins/passwords',
:registrations => 'admin/admins/registrations',
:sessions => 'admin/admins/sessions',
:unlocks => 'admin/admins/unlocks',
}
end
scope 'client' do
devise_for :users, :controllers => {
:confirmations => 'client/users/confirmations',
# :omniauth_callbacks => 'admin/admins/omniauth_callbacks',
:passwords => 'client/users/passwords',
:registrations => 'client/users/registrations',
:sessions => 'client/users/sessions',
:unlocks => 'client/users/unlocks',
}
end
namespace :admin do
root 'items#index'
resources :items
end
namespace :client do
root 'items#index'
resources :orders do
resources :order_items
end
resources :carts, :items do
resources :line_items
end
end
root 'client/items#index'
Мне непонятно, почему вызывается метод PUT в данном случае. Сейчас видимо для того,
чтобы не было ошибки, ему не хватает id, но мне нужно вызвать экшн create. Как нужно
задать форму, чтобы не было данной ошибки и запрос уходил в OrderControoler#create?
Ответы
Ответ 1
Выполните команду rake routes Посмотрите, какие пути доступны для /client/orders Для PUT путь должен быть с указанием идентификатора :id /client/orders/:id У вас же путь не привязан к заказу с конкретным идентификатором id No route matches [PUT] "/client/orders".
Комментариев нет:
Отправить комментарий