8
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[rails]カート内の同じ種類の商品をまとめて表示する

Last updated at Posted at 2020-04-26

railsのカート機能についてです。
すでにカートにある商品を、追加した場合なのですが、
数量表示のみを変更することができたので記しておきます。

具体的な方法としては、すでにカートにある商品がさらに追加されたときには、カートにある商品の数量を変更してupdateするようにしています。

cart_items_controller
def create
    @cart_item = current_user.cart_items.build(cart_item_params)
    @cart_items = current_user.cart_items.all
end

すでにカートにある商品の情報が知りたいので、カートの商品を全て取ってきます。

cart_items_controller

def create
    @cart_item = current_user.cart_items.build(cart_item_params)
    @cart_items = current_user.cart_items.all
    @cart_items.each do |cart_item|
      if cart_item.item_id == @cart_item.item_id
        
      end
  end
end

カート内の商品と新しくカートに追加する商品で同じものがあるかどうかを探すために、each文で回してあげ、同じ商品があったときはカート内の同商品の数量を変更してあげるようにします。
すでにカートに入れてる数量と新しく追加した数量を足した数量を、
new_quantityとしてupdateしてみたら動きました。

cart_items_controller

def create
  @cart_item = current_user.cart_items.build(cart_item_params)
  @cart_items = current_user.cart_items.all
  @cart_items.each do |cart_item|
    if cart_item.item_id == @cart_item.item_id
      new_quantity = cart_item.quantity + @cart_item.quantity
      cart_item.update_attribute(:quantity, new_quantity)
      @cart_item.delete
    end 
  end
  @cart_item.save
  redirect_to :cart_items
end

以上になります!
もっといいやり方があれば教えて下さい!

8
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?