Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Rails 4. Ошибка No route matches [PUT] “/client/orders”

#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".

Комментариев нет:

Отправить комментарий