我有一个问题:
@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 %>
怎么做?
答案 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>