0

act_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>

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

4

2 回答 2

1

数量:

实际上,我不知道acts_as_shopping cart它到底是做什么的。但无论如何,请查看Agile Web Development with Rails (4ed)中的“标准”实现,第 117 页。您可以将这些购物车偷到您的应用程序,或整个应用程序。我想这本书是关于你的。:)

产品特性:

由于业主的要求,从一开始就澄清问题及其潜在的并发症非常重要。所以你没有麻烦链接那里

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

因此,由于 OOP 思维,您必须在独立的 ActiveRecord 模型(其中有_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

...
于 2012-12-22T13:35:54.013 回答
0

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

  1. 在商店页面上,我创建了一个新的购物车并将其 id 存储在会话中
  2. 将商品添加到购物车是使用 Ajax 调用处理的,该调用将返回新的购物车商品 html 以更新标题中的 div
  3. 在结帐页面上,每个项目都有数量编辑文本框。
  4. 在更改数量时,我使用新数量和 product_id 进行 ajax 调用(您可以使用 cart_item_id 来完成)
于 2014-04-29T04:49:44.910 回答