0
votes

I can add to cart once, but after I refresh the page, the cart is empty. I'm using Spree 2.4.

I check the value of @order in the orders controller#edit after I click 'add to cart':

[1] pry(#<Spree::OrdersController>)> @order
=> #<Spree::Order id: 5, number: "R017142307", item_total: #<BigDecimal:89a8e10,'0.5E1',9(27)>, total: #<BigDecimal:89a8d20,'0.5E1',9(27)>, state: "cart", adjustment_total: #<BigDecimal:89a8bb8,'0.0',9(27)>, user_id: 1, completed_at: nil, bill_address_id: nil, ship_address_id: nil, payment_total: #<BigDecimal:89a8898,'0.0',9(27)>, shipping_method_id: nil, shipment_state: nil, payment_state: nil, email: "[email protected]", special_instructions: nil, created_at: "2016-03-13 05:41:55", updated_at: "2016-03-13 06:18:01", currency: "USD", last_ip_address: "192.168.1.108", created_by_id: 1, shipment_total: #<BigDecimal:897bc80,'0.0',9(27)>, additional_tax_total: #<BigDecimal:897bb90,'0.0',9(27)>, promo_total: #<BigDecimal:897baa0,'0.0',9(27)>, channel: "spree", included_tax_total: #<BigDecimal:897b938,'0.0',9(27)>, item_count: 1, approver_id: nil, approved_at: nil, confirmation_delivered: false, considered_risky: false, guest_token: "kRau34G-dOY0Sh06Mk0_4g", canceled_at: nil, canceler_id: nil, store_id: 1, state_lock_version: 0>

And line_items are there:

[3] pry(#<Spree::OrdersController>)> @order.line_items
=> [#<Spree::LineItem id: 21, variant_id: 7, order_id: 5, quantity: 1, price: #<BigDecimal:88e8480,'0.5E1',9(27)>, created_at: "2016-03-13 06:18:01", updated_at: "2016-03-13 06:18:01", currency: "USD", cost_price: #<BigDecimal:88e78a0,'0.17E2',9(27)>, tax_category_id: 1, adjustment_total: #<BigDecimal:88e7738,'0.0',9(27)>, additional_tax_total: #<BigDecimal:88e7648,'0.0',9(27)>, promo_total: #<BigDecimal:88e7558,'0.0',9(27)>, included_tax_total: #<BigDecimal:88e7468,'0.0',9(27)>, pre_tax_amount: #<BigDecimal:88e7378,'0.0',9(27)>>]

The views load and the shopping cart looks normal. However, after I refresh, it says the cart is empty..

@order is still the same, but the line_items have disappeared:

[1] pry(#<Spree::OrdersController>)> @order
=> #<Spree::Order id: 5, number: "R017142307", item_total: #<BigDecimal:d3bfeb8,'0.5E1',9(27)>, total: #<BigDecimal:d3bfdc8,'0.5E1',9(27)>, state: "cart", adjustment_total: #<BigDecimal:d3bfc60,'0.0',9(27)>, user_id: 1, completed_at: nil, bill_address_id: nil, ship_address_id: nil, payment_total: #<BigDecimal:d3bf968,'0.0',9(27)>, shipping_method_id: nil, shipment_state: nil, payment_state: nil, email: "[email protected]", special_instructions: nil, created_at: "2016-03-13 05:41:55", updated_at: "2016-03-13 06:18:01", currency: "USD", last_ip_address: "192.168.1.108", created_by_id: 1, shipment_total: #<BigDecimal:d3beb80,'0.0',9(27)>, additional_tax_total: #<BigDecimal:d3bea90,'0.0',9(27)>, promo_total: #<BigDecimal:d3be9a0,'0.0',9(27)>, channel: "spree", included_tax_total: #<BigDecimal:d3be838,'0.0',9(27)>, item_count: 1, approver_id: nil, approved_at: nil, confirmation_delivered: false, considered_risky: false, guest_token: "kRau34G-dOY0Sh06Mk0_4g", canceled_at: nil, canceler_id: nil, store_id: 1, state_lock_version: 0>

[2] pry(#<Spree::OrdersController>)> @order.line_items
=> []

I wasn't able to track down where the line_items are populated. Can someone help? Thanks.

EDIT:

I see a DELETE in the logs after the POST to /orders/populate/ in the GET "/cart":

Started GET "/cart" for 192.168.1.108 at 2016-03-13 19:01:17 -0400
Cannot render console from 192.168.1.108! Allowed networks: 192.168.2.0/192.168.2.255, 127.0.0.0/127.255.255.255, ::1
Processing by Spree::OrdersController#edit as HTML
  Spree::Preference Load (0.4ms)  SELECT  "spree_preferences".* FROM "spree_preferences"  WHERE "spree_preferences"."key" = 'spree/frontend_configuration/locale' LIMIT 1
  Spree::User Load (0.7ms)  SELECT  "spree_users".* FROM "spree_users"  WHERE "spree_users"."deleted_at" IS NULL AND "spree_users"."id" = 1  ORDER BY "spree_users"."id" ASC LIMIT 1
  Spree::Store Load (0.5ms)  SELECT  "spree_stores".* FROM "spree_stores"  WHERE (url like '%192.168.1.108%')  ORDER BY "spree_stores"."id" ASC LIMIT 1
  Spree::Store Load (0.5ms)  SELECT  "spree_stores".* FROM "spree_stores"  WHERE "spree_stores"."default" = 't'  ORDER BY "spree_stores"."id" ASC LIMIT 1
  Spree::Order Load (1.5ms)  SELECT  "spree_orders".* FROM "spree_orders"  WHERE "spree_orders"."completed_at" IS NULL AND "spree_orders"."currency" = 'USD' AND "spree_orders"."guest_token" = 'kRau34G-dOY0Sh06Mk0_4g' AND "spree_orders"."store_id" = 1 AND "spree_orders"."user_id" = 1 LIMIT 1
  Spree::Adjustment Load (1.4ms)  SELECT "spree_adjustments".* FROM "spree_adjustments"  WHERE "spree_adjustments"."adjustable_type" = 'Spree::Order' AND "spree_adjustments"."adjustable_id" IN (5)  ORDER BY spree_adjustments.created_at ASC
  Spree::Order Load (0.2ms)  SELECT "spree_orders".* FROM "spree_orders"  WHERE "spree_orders"."user_id" = ? AND "spree_orders"."completed_at" IS NULL AND (id != 5)  [["user_id", 1]]
  Spree::Order Load (0.6ms)  SELECT  "spree_orders".* FROM "spree_orders"  WHERE "spree_orders"."number" IS NULL LIMIT 1
   (0.2ms)  SELECT COUNT(*) FROM "spree_roles" INNER JOIN "spree_roles_users" ON "spree_roles"."id" = "spree_roles_users"."role_id" WHERE "spree_roles_users"."user_id" = ? AND "spree_roles"."name" = 'admin'  [["user_id", 1]]
  Spree::LineItem Load (0.2ms)  SELECT "spree_line_items".* FROM "spree_line_items"  WHERE "spree_line_items"."order_id" = ?  ORDER BY spree_line_items.created_at ASC  [["order_id", 5]]
  Spree::Variant Load (0.5ms)  SELECT  "spree_variants".* FROM "spree_variants"  WHERE "spree_variants"."id" = ? LIMIT 1  [["id", 30]]
  Spree::Product Load (0.3ms)  SELECT  "spree_products".* FROM "spree_products"  WHERE "spree_products"."id" = ? LIMIT 1  [["id", 7]]
  Spree::SaleEvent Load (0.2ms)  SELECT "spree_sale_events".* FROM "spree_sale_events"  WHERE ((start_date <= '2016-03-13 23:01:17.395935' AND end_date >= '2016-03-13 23:01:17.396008') OR is_permanent = 't') AND "spree_sale_events"."is_active" = 't'
   (0.1ms)  begin transaction
  Spree::Adjustment Load (0.4ms)  SELECT "spree_adjustments".* FROM "spree_adjustments"  WHERE "spree_adjustments"."adjustable_id" = ? AND "spree_adjustments"."adjustable_type" = ?  [["adjustable_id", 36], ["adjustable_type", "Spree::LineItem"]]
  Spree::InventoryUnit Load (0.2ms)  SELECT "spree_inventory_units".* FROM "spree_inventory_units"  WHERE "spree_inventory_units"."line_item_id" = ?  [["line_item_id", 36]]
  SQL (1.2ms)  DELETE FROM "spree_line_items" WHERE "spree_line_items"."id" = ?  [["id", 36]]
  SQL (0.8ms)  UPDATE "spree_orders" SET "updated_at" = '2016-03-13 23:01:17.410798' WHERE "spree_orders"."id" = 5
   (12.6ms)  commit transaction
   (0.2ms)  SELECT COUNT(*) FROM "spree_roles" INNER JOIN "spree_roles_users" ON "spree_roles"."id" = "spree_roles_users"."role_id" WHERE "spree_roles_users"."user_id" = ? AND "spree_roles"."name" = 'admin'  [["user_id", 1]]
  Spree::User Load (1.0ms)  SELECT  "spree_users".* FROM "spree_users"  WHERE "spree_users"."deleted_at" IS NULL AND "spree_users"."id" = ? LIMIT 1  [["id", 1]]
Deface: 1 overrides found for 'spree/orders/edit'
Deface: 'move_cart_buttons' matched 0 times with '[data-hook='form-table-foot']'
  Rendered /usr/local/rvm/gems/ruby-2.2.1@mystore20151008/bundler/gems/spree_bootstrap_frontend-d20c03352917/spree_bootstrap/frontend/app/views/spree/shared/_error_messages.html.erb (1.1ms)
  Spree::Image Load (0.7ms)  SELECT "spree_assets".* FROM "spree_assets"  WHERE "spree_assets"."type" IN ('Spree::Image') AND "spree_assets"."viewable_id" = ? AND "spree_assets"."viewable_type" = ?  ORDER BY "spree_assets"."position" ASC  [["viewable_id", 30], ["viewable_type", "Spree::Variant"]]
  Spree::Variant Load (0.9ms)  SELECT  "spree_variants".* FROM "spree_variants"  WHERE "spree_variants"."deleted_at" IS NULL AND "spree_variants"."product_id" = ? AND "spree_variants"."is_master" = 't' LIMIT 1  [["product_id", 7]]
  Spree::Image Exists (0.5ms)  SELECT  1 AS one FROM "spree_assets"  WHERE "spree_assets"."type" IN ('Spree::Image') AND "spree_assets"."viewable_id" = ? AND "spree_assets"."viewable_type" = ? LIMIT 1  [["viewable_id", 7], ["viewable_type", "Spree::Variant"]]
  Spree::Image Load (0.4ms)  SELECT  "spree_assets".* FROM "spree_assets"  WHERE "spree_assets"."type" IN ('Spree::Image') AND "spree_assets"."viewable_id" = ? AND "spree_assets"."viewable_type" = ?  ORDER BY "spree_assets"."position" ASC LIMIT 1  [["viewable_id", 7], ["viewable_type", "Spree::Variant"]]
  Spree::OptionValue Load (1.2ms)  SELECT "spree_option_values".* FROM "spree_option_values" INNER JOIN "spree_option_values_variants" ON "spree_option_values"."id" = "spree_option_values_variants"."option_value_id" WHERE "spree_option_values_variants"."variant_id" = ?  [["variant_id", 30]]
  Spree::OptionType Load (0.3ms)  SELECT  "spree_option_types".* FROM "spree_option_types"  WHERE "spree_option_types"."id" = ?  ORDER BY spree_option_types.position LIMIT 1  [["id", 1]]
  Spree::OptionType Load (0.2ms)  SELECT  "spree_option_types".* FROM "spree_option_types"  WHERE "spree_option_types"."id" = ?  ORDER BY spree_option_types.position LIMIT 1  [["id", 2]]
   (0.3ms)  SELECT SUM("spree_stock_items"."count_on_hand") AS sum_id FROM "spree_stock_items" INNER JOIN "spree_stock_locations" ON "spree_stock_locations"."id" = "spree_stock_items"."stock_location_id" WHERE "spree_stock_items"."deleted_at" IS NULL AND "spree_stock_items"."variant_id" = 30 AND "spree_stock_locations"."active" = 't'
  Rendered spree/orders/_line_item.html.erb (305.0ms)
  Rendered spree/orders/_form.html.erb (335.1ms)
  Spree::PaymentMethod Load (1.2ms)  SELECT "spree_payment_methods".* FROM "spree_payment_methods"  WHERE "spree_payment_methods"."deleted_at" IS NULL
  CACHE (0.0ms)  SELECT "spree_payment_methods".* FROM "spree_payment_methods"  WHERE "spree_payment_methods"."deleted_at" IS NULL
  Rendered spree/orders/edit.html.erb within spree/layouts/spree_application (463.7ms)
  Rendered spree/shared/_head.html.erb (8017.9ms)
Deface: 1 overrides found for 'spree/shared/_header'
Deface: 'move_link_to_cart_mobile' matched 1 times with 'div.navbar-brand-mobile'
Deface: [WARNING] No :original defined for 'move_link_to_cart_mobile', you should change its definition to include:
 :original => '1fe9fe305a7e977a4311678e40b0de8ac4fe953b' 
Deface: 4 overrides found for 'spree/shared/_nav_bar'
Deface: 'auth_shared_login_bar' matched 1 times with 'li#search-bar'
Deface: [ERROR] The original source for 'auth_shared_login_bar' has changed, this override should be reviewed to ensure it's still valid.
Deface: 'remove_search_bar' matched 1 times with 'li#search-bar'
Deface: [WARNING] No :original defined for 'remove_search_bar', you should change its definition to include:
 :original => 'c00d67dfc0496d21a351b48c41a728412cb5ed2c' 
Deface: 'move_link_to_cart' matched 1 times with 'ul#nav-bar'
Deface: [WARNING] No :original defined for 'move_link_to_cart', you should change its definition to include:
 :original => 'd32d3ed0d028db429111568a65baba0eeac8f4e0' 
Deface: 'add_country_flag_after_cart_link' matched 1 times with 'li#link-to-cart'
Deface: [WARNING] No :original defined for 'add_country_flag_after_cart_link', you should change its definition to include:
 :original => 'e9241f273349c0f080cef375ce5d2c26546eb870' 
  Rendered spree/shared/_nav_bar.html.erb (4.2ms)
  Rendered spree/shared/_header.html.erb (110.2ms)
  Rendered spree/shared/_footer_cart.html.erb (1712.9ms)
  Spree::Tracker Load (0.2ms)  SELECT  "spree_trackers".* FROM "spree_trackers"  WHERE "spree_trackers"."active" = 't' AND "spree_trackers"."environment" = 'development'  ORDER BY "spree_trackers"."id" ASC LIMIT 1
  Rendered /usr/local/rvm/gems/ruby-2.2.1@mystore20151008/bundler/gems/spree-dfd548b02fb3/frontend/app/views/spree/shared/_google_analytics.html.erb (11.8ms)
Completed 200 OK in 10696ms (Views: 10571.2ms | ActiveRecord: 35.1ms)


Started GET "/assets/spree/frontend/all.css" for 192.168.1.108 at 2016-03-13 19:01:28 -0400
Cannot render console from 192.168.1.108! Allowed networks: 192.168.2.0/192.168.2.255, 127.0.0.0/127.255.255.255, ::1


Started GET "/assets/spree/frontend/all.js" for 192.168.1.108 at 2016-03-13 19:01:28 -0400
Cannot render console from 192.168.1.108! Allowed networks: 192.168.2.0/192.168.2.255, 127.0.0.0/127.255.255.255, ::1


Started GET "/cart_link" for 192.168.1.108 at 2016-03-13 19:01:28 -0400
Cannot render console from 192.168.1.108! Allowed networks: 192.168.2.0/192.168.2.255, 127.0.0.0/127.255.255.255, ::1
Processing by Spree::StoreController#cart_link as */*
  Spree::Preference Load (0.5ms)  SELECT  "spree_preferences".* FROM "spree_preferences"  WHERE "spree_preferences"."key" = 'spree/frontend_configuration/locale' LIMIT 1
  Spree::User Load (2.1ms)  SELECT  "spree_users".* FROM "spree_users"  WHERE "spree_users"."deleted_at" IS NULL AND "spree_users"."id" = 1  ORDER BY "spree_users"."id" ASC LIMIT 1
   (0.0ms)  SELECT COUNT(*) FROM "spree_roles" INNER JOIN "spree_roles_users" ON "spree_roles"."id" = "spree_roles_users"."role_id" WHERE "spree_roles_users"."user_id" = ? AND "spree_roles"."name" = 'admin'  [["user_id", 1]]
  Spree::Store Load (0.4ms)  SELECT  "spree_stores".* FROM "spree_stores"  WHERE (url like '%192.168.1.108%')  ORDER BY "spree_stores"."id" ASC LIMIT 1
  Spree::Store Load (0.8ms)  SELECT  "spree_stores".* FROM "spree_stores"  WHERE "spree_stores"."default" = 't'  ORDER BY "spree_stores"."id" ASC LIMIT 1
  Spree::Order Load (0.4ms)  SELECT  "spree_orders".* FROM "spree_orders"  WHERE "spree_orders"."completed_at" IS NULL AND "spree_orders"."currency" = 'USD' AND "spree_orders"."guest_token" = 'kRau34G-dOY0Sh06Mk0_4g' AND "spree_orders"."store_id" = 1 AND "spree_orders"."user_id" = 1 LIMIT 1
  Rendered /usr/local/rvm/gems/ruby-2.2.1@mystore20151008/bundler/gems/spree-dfd548b02fb3/frontend/app/views/spree/shared/_link_to_cart.html.erb (12.4ms)
Completed 200 OK in 969ms (Views: 939.1ms | ActiveRecord: 4.2ms)


Started GET "/assets/icons/delete.png" for 192.168.1.108 at 2016-03-13 19:01:29 -0400
Cannot render console from 192.168.1.108! Allowed networks: 192.168.2.0/192.168.2.255, 127.0.0.0/127.255.255.255, ::1
1
I think it is not your fault. It is spree issue. While page refresh the cart gets empty. - Mohammad Shahadat Hossain
Strange. Do you see sql queries running when adding to cart and later when refreshing? Can you see order content in admin right after you add product to the cart? - Jakub
@Jakub I can see the order in the admin right after I add to cart. It is in 'CART' state, but when I go to the order 'CART' link, it says the order is empty. I can see lots of sql queries.. shall I post? - sybind
can you see added row by ` INSERT INTO "spree_line_items" ("cost_price", "created_at", "currency", "order_id", "price", "quantity", "tax_category_id", "updated_at", "variant_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) [["cost_price", 17.0], ["created_at", "2016-03-13 22:02:09.040804"], ["currency", "USD"], ["order_id", 5], ["price", 55.0], ["quantity", 1], ["tax_category_id", 1], ["updated_at", "2016-03-13 22:02:09.040804"], ["variant_id", 30]]` query? Can you select direct in DB client? Just wonder where is the issue. Is it DB related or Spree. - Jakub
@Jakub I don't think it's a DB issue because there's a DELETE statement after I refresh the cart page. For some reason, it is deleting the line item. - sybind

1 Answers

0
votes

Seems like you are using gem 'spree_active_sale' which is culprit for this behaviour. It has a before_filter which destroys inactive product line items from order. See https://github.com/suryart/spree_active_sale/blob/master/app/controllers/spree/orders_controller_decorator.rb#L3.