Rails将数量添加到购物车

时间:2015-05-14 04:49:54

标签: ruby-on-rails ruby

我有一个问题:

@order_item = @order.order_items.find_or_initialize_by(product_id: params[:product_id])

我想在调用.save之前在订单项的数量中添加一个。

quantity的默认值为0。这是我的完整代码:

def create
    @order_item = @order.order_items.find_or_initialize_by(product_id: params[:product_id])

    respond_to do |format|
      if @order_item.save
        format.html { redirect_to @order, notice: 'Successfully added product to cart.' }
        format.json { render :show, status: :created, location: @order_item }
      else
        format.html { render :new }
        format.json { render json: @order_item.errors, status: :unprocessable_entity }
      end
    end
  end

我是ruby和rails的新手。怎么做?谢谢

更新

<tr>
    <th>Items:</th>
    <td><%= @order.order_items.count %></td>
  </tr>
  <tr>
    <th>Items</th>
    <th>Title</th>
    <th>Quantity</th>
    <th>Unit Price</th>
    <th>Subtotal</th>
    <th></th>
  </tr>
  <% @order.order_items.each do |item| %>
    <tr>
        <td><%= image_tag "products/#{item.product.image_url}" %></td>
        <td><%= item.product.title %></td>
        <td><%= item.quantity %></td>
        <td><%= print_price item.product.price %></td>
        <td><%= print_price item.subtotal %></td>
    <td><%= link_to 'Remove', item, method: :delete, data: { confirm: 'Are you sure?' } %></td>
    </tr>
  <% end %>
  <tr>
    <th>TOTAL</th>
    <td></td>
    <td></td>
    <td></td>
    <td><%= print_price @order.total %></td>
    <td></td>
  </tr>

我的当前代码仅在某些order_items中打印出order,例如,每个order_item数量为2。所以我想打印出所有总量。

<%= @order.order_items.count %>

怎么做?

1 个答案:

答案 0 :(得分:0)

如果order_items表中有数量属性,则可以在保存之前通过简单地将值赋给setter来实现。

@order_item.quantity = 1

更新
我假设,您想要订购商品数量总和。 您可以通过

找到订单总数量
@order.order_items.sum(:quantity) 

替换

<th>Items:</th>
<td><%= @order.order_items.count %></td>

<th>Items:</th>
<td><%= @order.order_items.sum(:quantity) %></td>