#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".
Комментариев нет:
Отправить комментарий