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

时间:2012-12-16 08:20:19

标签: ruby-on-rails ruby-on-rails-3 shopping-cart acts-as-shopping-cart

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

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

<td><%= shopping_cart_item.item.name %></td>
<td><%= shopping_cart_item.item.price %></td>
<td><%= shopping_cart_item.quantity %></td>

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

但我不太清楚如何处理。

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

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

我如何在acts_as_shopping_cart

的范围内这样做

感谢。

修改1:

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

修改2

views/shopping_cart/show.html.erb

<h1>Shopping Cart</h1>

<table class="table table-striped">
  <thead>
        <tr>
            <td>Item</td>
            <td>Price</td>
            <td>Quantity</td>
        </tr>
    </thead>
    <tbody>
        <tr>  
      <%= render :partial => 'shopping_cart_item', :collection => @shopping_cart.shopping_cart_items %>
    </tr>
  </tbody>  
</table>

<div>
    <p>SubTotal: <%= number_to_currency @shopping_cart.subtotal %></p>      
</div>
<div>
    <p>Taxes: <%= number_to_currency @shopping_cart.taxes %></p>
</div>
<div>
    <p>Total: <%= number_to_currency @shopping_cart.total %></p>
</div>

_shopping_cart_item.html.erb部分看起来像这样:

<td><%= shopping_cart_item.item.name %></td>
<td><%= shopping_cart_item.item.price %></td>
<td><%= shopping_cart_item.quantity %></td>

非常非常基本的购物车 - 但不知道如何从数据,尺寸等移动到实际的购物车。

2 个答案:

答案 0 :(得分:1)

<强>数量:

实际上,我不知道acts_as_shopping cart以及它究竟做了什么。但无论如何看看&#39;标准&#39;在Agile Web Development with Rails (4ed),第117页中实现。您可以将这些购物车窃取到您的应用程序或整个应用程序中。我觉得这本书是关于你的。 :)

产品属性:

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

任何&#39;属性&#39;必须要知道并仔细分类。比方说,颜色是一个简单的任何地方(美国,非洲或欧洲的红色是红色),但尺寸 - 不是。大小什么?布料尺寸取决于区域尺寸,文化,布料类型等,并且可以只是一个值(&#34; M&#34;,&#34; S&#34;或&#34; 46&#34;)并且取决于产品原点... 3D的大小是3个数字(可以是英寸,厘米,米),取决于销售区域。

所以,由于OOP的思考,你必须编写每个产品的属性&#39;在一个独立的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
#=> [<self>, <#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 :(得分:0)

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

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