Контроллер очистки, Обновление количества товара в корзине - PullRequest
0 голосов
/ 06 июня 2010

Привет, ребята. Мне было интересно, может ли кто-нибудь помочь мне, мне нужно почистить этот контроллер, поскольку полученный код просто обновляет количество элементов, если оно уже существует, кажется слишком сложным.

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 Ответ

1 голос
/ 06 июня 2010

Я думаю, что вы ищете:

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- создание), так как вы должны выяснить, был ли ресурс только что создан или он уже существовал.

...