清理控制器,更新购物车内的物品数量

时间:2010-06-06 18:34:34

标签: ruby-on-rails ruby shopping-cart

大家好,我想知道是否有人可以帮助我,我需要清理这个控制器作为结果代码,只需更新项目数量,如果它已经存在似乎太复杂。

class LineItemsController < ApplicationController  
  def create
   @product = Product.find(params[:product_id])
    if LineItem.exists?(:cart_id => current_cart.id)
      item = LineItem.find(:first, :conditions => [ "cart_id = #{@current_cart.id}"])
      LineItem.update(item.id, :quantity => item.quantity + 1)
    else  
     @line_item = LineItem.create!(:cart => current_cart, :product => @product, :quantity => 1, :unit_price => @product.price)
     flash[:notice] = "Added #{@product.name} to cart."
  end
  redirect_to root_url
 end  
end

`

一如既往,我们非常感谢任何帮助,代码应该是相当自我解释的,谢谢:)

PS在这里贴了它,看起来有点好笑http://pastie.org/994059

1 个答案:

答案 0 :(得分:1)

我认为你在寻找的是:

class LineItemsController < ApplicationController
  def create
    @product = Product.find(params[:product_id])
    item = LineItem.find_or_initialize_by_cart_id(:cart_id => current_cart.id, :cart => current_cart, :product => @product, :quantity => 0, :unit_price => @product.price)
    item.increment! :quantity
    flash[:notice] = "Added #{@product.name} to cart."
    redirect_to root_url
  end
end

那么它的作用是调用LineItem.find_by_cart_id(current_cart.id),如果它不存在,则使用传递的属性创建它。我不认为你可以解决的一个问题是在进行数据库调用之后更新数量(找到-OR-创建),因为你必须弄清楚资源是刚刚创建的还是已经存在。