大家好,我想知道是否有人可以帮助我,我需要清理这个控制器作为结果代码,只需更新项目数量,如果它已经存在似乎太复杂。
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
答案 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-创建),因为你必须弄清楚资源是刚刚创建的还是已经存在。