使用acts_as_shopping_cart如何实现基本数量编辑?

acts_as_shopping_cart gem需要两个模型 – Shopping CartShopping Cart Item

它允许您为项目访问的属性如下:

    

但是我希望允许用户更改数量 – 例如从下拉菜单(因此从集合中选择标签)。

但我不太确定如何处理这个问题。

我还想在我的项目中添加其他属性 – 比如项目大小,颜色等。

我希望我的店主能够指定那些东西(即大小,颜色等)。

我如何在acts_as_shopping_cart的范围内做到这一点?

谢谢。

编辑1:

或者如果有人对另一个允许我进行基本结账的购物车解决方案有更好的建议,我也会很感激。

编辑2

views/shopping_cart/show.html.erb

 

Shopping Cart

'shopping_cart_item', :collection => @shopping_cart.shopping_cart_items %>
Item Price Quantity

SubTotal:

Taxes:

Total:

_shopping_cart_item.html.erb partial看起来像这样:

    

非常非常基本的购物车 – 但不知道如何从这个移动到具有数量,大小等的实际购物车。

数量:

实际上,我不知道acts_as_shopping cart以及它究竟是做什么的。 但无论如何,请参阅使用Rails的敏捷Web开发(4ed)中的“标准”实现,第117页。您可以将这些购物车窃取到您的应用程序或整个应用程序中。 我觉得这本书是关于你的。 🙂

产品属性:

从一开始就澄清问题及其潜在的复杂性是非常重要的,因为业主的要求。 所以你没有麻烦链接那里 。

必须知道任何“属性”并仔细分类。 比方说,颜色是一个简单的任何地方(美国,非洲或欧洲的红色是红色),但尺寸 – 不是。 大小什么? 布料尺寸取决于区域尺寸,文化,布料类型等,可以只是一个值(“M”,“S”或“46”)并且取决于产品来源…… 3D的尺寸是3个数字(可以是英寸) ,cm,m)并取决于销售区域。

因此,由于OOP的思考,您必须在独立的ActiveRecord模型(has_many product_items)中编写每个产品的“属性”,但您必须确切知道如何能够尽快搜索它们。

在结束时,我认为你完成了类似的事情。

 size = Size.new(:origin => :us, :value => "m") size.origin #=> "us" size.value #=> "m" size.with_analogs # model knows how to translate sizes between each other #=> [, <#Size @origin: "europe", @value: 46>, <#Size. @origin: "europe", @value: 45.5>, <#Size @origin: "australia", @value: ...>] 

因此,尽管产品项目(实际上属于)仅有一个特定尺寸,您可以找到类似尺寸的类似商品:

 product = Product.find(1) Product.where(:name => "%#{product.name}", :size => {:id => [product.size.with_analogs.map(&:id)]}) 

或者你可以在数据库中存储常用的测量学习STI如何翻译它们,但它有点复杂。

 class Size class EuropeSize < Size # STI class UsSize < Size # STI class AustraliaSize < Size # STI ... 

这是我添加/编辑数量的方式

  1. 在商店页面上,我创建了一个新的购物车并将其ID存储在会话中
  2. 使用Ajax调用处理向购物车添加项目,该调用将返回新购物车项目html以更新标题中的div
  3. 在结帐页面上,每个项目都有数量编辑文本框。
  4. 在更改数量时,我使用新数量和product_id进行ajax调用(您可以使用cart_item_id执行此操作)