Итак, вот как это работает ..
клиент открывает браузер, корзина создается во внутреннем пространстве и в БД, и он начинает просматривать товары. (создает корзину)
он добавляет товары в корзину (создает line_items)
- он нажимает кнопку оформления заказа и заказ создается (создает заказ)
если заказ успешно создан (проверка через шлюз 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
здесь заказ снимок экрана стола
и line_items
как вы можете видеть, 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. если какой-то код будет пропущен, я буду обновлять его по мере необходимости.