Shopping Cart Order Sessions In Rails 7 With Turbo

Поделиться
HTML-код
  • Опубликовано: 30 сен 2024

Комментарии • 23

  • @Deanin
    @Deanin  2 года назад +7

    Build a Linktree Clone Course learn.deanin.com/courses/build-a-linktree-on-rails
    Edit: As pointed out in the comments, your price could probably be an integer instead of a decimal, as that's how Stripe stores the value. Which means you'll have to convert for decimal displays.
    Had a few people contact me to say that the previous shopping cart tutorial doesn't work in Rails 7. So here's a bonus holiday video to hopefully address this ASAP.

    • @josbexerra8115
      @josbexerra8115 2 года назад

      Excelete tutorial mister Dean, los curso estan sutitulados en ingles

  • @SupeRails
    @SupeRails 2 года назад +5

    0:44 why decimal, not integer? Stripe for example stores amounts in integer
    4:03 I would have used @cart = Cart.find_or_create_by(id: session[:cart_id]) - less code to write. or even better - create a cart only when the first product is being added to the cart. That way we don't have an empty cart for each session without added cart_items...

    • @Deanin
      @Deanin  2 года назад +2

      Combination of not knowing how Stripe stores it and wanting to cover how to set decimal precision lol. I'll update the pinned comment, thanks!

  • @vaibhavshankarjoshi
    @vaibhavshankarjoshi 2 года назад +1

    How can we implement catagory and subcategories?
    also is it possible that we can make admin and user so that user can only bye things and admin can only add or remove catagory subcategories and products

  • @danbenjamin5165
    @danbenjamin5165 2 года назад +1

    Excellent tutorial, but I'm getting an error cart_controller.rb:11: syntax error, unexpected ')'
    ...ent_orderable.update(quantity:) on any line that includes update(quantity:).
    Has anyone else run into this issue? @deanin?

    • @PaprykaKonserwowa
      @PaprykaKonserwowa 2 года назад

      hi, I've updated Ruby, Rails, bundler and it works. Now I only have some issues with turbo but I'll investigate that part later.

    • @andrewkancev6035
      @andrewkancev6035 Год назад

      Same problem

    • @andrewkancev6035
      @andrewkancev6035 Год назад

      and - undefined method `orderables' for nil:NilClass

    • @mefitdev
      @mefitdev Год назад

      If you don't want to update everything, you can just:
      .update(quantity: quantity).
      Explanation: (This works on newer rails, ruby, bundler versions)
      Let say we have the following:
      custom_attribute = "foo"
      While calling a function, if we add the colon after the name of the variable, a new hash will be passed having the name of the variable as the hash key, and the value of the variable as the hash value.
      Like:
      function_call(custom_attribute:) == function_call({custom_attribute: "foo"})

  • @scottm.2490
    @scottm.2490 2 года назад +1

    Hi at 17:35 you use the syntax `current_orderable.update(quantity:)` I was expecting `current_orderable.update(quantity: quantity)` could you help me better understand how `current_orderable.update(quantity:)` works and why you dont have to pass in the value? Thanks

    • @saadshoukat
      @saadshoukat Год назад

      Find Any Answer?

    • @mefitdev
      @mefitdev Год назад

      I just saw this, I was trying to find the same answer.
      Let say we have the following:
      custom_attribute = "foo"
      While calling a function, if we add the colon after the name of the variable, a new hash will be passed having the name of the variable as the hash key, and the value of the variable as the hash value.
      Like:
      function_call(custom_attribute:) == function_call({custom_attribute: "foo"})

    • @ddevulders
      @ddevulders 9 месяцев назад

      This is the new hash syntax introduced in Ruby 3 AFAIK. It's to adhere to the DRY principle (Do not repeat yourself) so instead of constantly calling method: method. you just say method:. This will automaticly invoke the local variable or method with the same name in it's specific scope.

    • @devatif
      @devatif 5 месяцев назад

      That's basically update in Ruby following the DRY principle, If you use RUBOCOP and write that syntax, it will automatically set to use the DRY principle i.e. `current_orderable.update(quantity:)` instead of `current_orderable.update(quantity: quantity)`

  • @Drill2411
    @Drill2411 2 года назад +1

    What do you think about your purchase history?

    • @Deanin
      @Deanin  2 года назад +3

      That's probably something that I would implement after setting up Stripe because stripe gives you the ability to request a user's payment history. Which is also a good way to validate that the user actually owns the product and hasn't done something fishy like issued a chargeback.
      I can take a look at setting something like that up for a potential part 2.

  • @fugeeohu9357
    @fugeeohu9357 Год назад

    What should I do with all the records in the orderables table after checkout is completed? Since there are many orderables to an order and I only want to create one row in the orders table

  • @kaygee1m
    @kaygee1m Год назад

    When you add more of the same product, it needs to add to that quantity of that product, not replace it! Otherwise, it's not really an "add"!

    • @jhonnatasalencar4476
      @jhonnatasalencar4476 11 месяцев назад

      Just replace : current_orderable.update(quantity:) for
      current_orderable.update(quantity: current_orderable.quantity + quantity)

  • @joereeve2569
    @joereeve2569 Год назад

    My cart gets erased every time I navigate to a new page, any idea what might be happening here?

    • @joereeve2569
      @joereeve2569 Год назад

      Missed an equal sign in the initialize_cart method..

  • @dianas1720
    @dianas1720 Год назад

    Hi, I'm getting this error message and I want to cry, I have tried so many different solutions, but I'm still stucked! can you please help? NoMethodError in CartsController#remove
    undefined method `destroy' for nil:NilClass
    Extracted source (around line #20):
    def remove
    Orderable.find_by(id: params[:id]).destroy
    end
    end