Нужно скопировать Order.id в кратные строки line_items.order_id после создания заказа - PullRequest
0 голосов
/ 03 апреля 2012

Итак, вот как это работает ..

  1. клиент открывает браузер, корзина создается во внутреннем пространстве и в БД, и он начинает просматривать товары. (создает корзину)

  2. он добавляет товары в корзину (создает line_items)

  3. он нажимает кнопку оформления заказа и заказ создается (создает заказ)

если заказ успешно создан (проверка через шлюз PayPal), то браузер перенаправляет пользователя на страницу товаров, и корзина уничтожается. (код скажет это лучше)

Orders_Controller

def create
    @order = current_cart.build_order(params[:order])
    @order.ip_address = request.remote_ip
    if @order.save
      if @order.purchase
        Cart.destroy(session[:cart_id])
        session[:cart_id] = nil
      else
        render :action => "failure"
      end
        respond_to do |format|
          format.html { redirect_to products_path, :notice => 
          'Thank you for your order.' }
          format.json { render :json => @order }
        end
    else
      render :action => 'new'
    end
  end

line_items остается в базе данных, потому что я хочу отобразить Order в админ-панели и line_items для этого заказа, и я бы сделал это, если бы мог сохранить order.id в line_items.order_id.

Теперь, когда я заполняю форму для нового заказа и нажимаю кнопку отправки, у меня есть значение NULL для всех полей line_items.order_id, но мне нужно иметь в нем order.id

здесь заказ снимок экрана стола

enter image description here

и line_items

enter image description here

как вы можете видеть, order_id в line_items равен id из order (40), но это так, потому что я вручную вставил order_id в line_items для целей тестирования. Обычно я получаю значение NULL вместо order_id

Я просто не понимаю, как вставить этот order.id в line_items после сохранения заказа

Я мог бы объяснить свою идею здесь, но только словами, как я ее вижу, я не знаю, как закодировать это в рельсах:

Итак, после создания заказа приложение должно искать line_items с тем же cart_id, что и сохраненный заказ (так как оба имеют поле cart_id в таблицах), и для всех line_items с тем же cart_id, что и order, изменить order_id = order.id. Вот как я это вижу. Если есть другой способ, пожалуйста, дайте мне знать. Спасибо.

p.s. если какой-то код будет пропущен, я буду обновлять его по мере необходимости.

1 Ответ

1 голос
/ 03 апреля 2012

Похоже, что current_cart.build_order не присваивает LineItems корзины для ордера при его создании. Вы могли бы просто добавить @order.line_items = current_cart.line_items после строки с .build_order. Затем, когда ордер был сохранен, LineItems будет связан с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...