加入购物车数量逻辑RoR

时间:2012-11-03 11:20:11

标签: ruby-on-rails ruby-on-rails-3 if-statement model controller

我创建了一个名为add_to_cart的方法,每次用户将产品添加到购物车时都会调用该方法 - 然后该方法检查项目是否已存在,如果是,则将数量增加+1。

我遇到的问题是,如果购物车中尚不存在产品,我不确定如何从我的模型中调用我的Items'cre​​ate'操作(在Items控件中)。

我想我可以使用Item.create(...)但我宁愿只调用我的Items控制器中已存在的create动作。

目前我有:

产品#索引视图

 ...
 <%= button_to "Add to Cart", add_to_cart_path(:product_id => product), :method => :post %>
 ...

路线

 ...
 post '/add_to_cart/:product_id' => 'carts#add_to_cart', :as => 'add_to_cart'
 ...

推车控制器

 class CartsController < ApplicationController

 def show
   @cart = current_cart
 end

 def add_to_cart
   current_cart.add_item(params[:product_id])
   redirect_to cart_path(current_cart.id)
 end

 end

购物车型号

class Cart < ActiveRecord::Base
has_many :items

def add_item(product_id)
        item = items.where('product_id = ?', product_id).first
    if item
        # increase the quantity of product in cart
        item.quantity + 1
        save
    else
        save # "THIS IS WHERE I WANT TO CALL ITEMS CONTROLLER CREATE"
    end
end

项目控制器

class ItemsController < ApplicationController

def create
    @product = Product.find(params[:product_id])
    @item = Item.create!(:cart => current_cart, :product => @product, :quantity => 1, :unit_price => @product.price)
    redirect_to cart_path(current_cart.id)
end

end

关于如何实现此重定向到我的创建操作的任何帮助真的非常感谢! :)

1 个答案:

答案 0 :(得分:1)

您的Cart模型无法调用控制器方法,也不需要。

您的方法应如下所示:

class Cart < ActiveRecord::Base
  has_many :items

  def add_item(product_id)
    item = items.find_or_create_by_product_id(product_id)
    item.quantity += 1
    item.save
  end
end

然后,您的CartsControlleradd_item方法可以将用户重定向到应有的位置。