Spree commerce - Como adicionar mais de uma Variação de um produto de uma única vez ao carrinho
Precisei para um projeto de Ecommerce usando o Spree, que para cada Variação de produto houvesse um campo com a quantidade e também que se pudesse adicionar mais de um produto por vez ao carrinho.
Para conseguir isso precisei mudar dois arquivos.
No orders_controller.erb :
create.after do params[:quantities].each do |variant_id,quantity| @order.add_variant(Variant.find(variant_id.to_i), quantity.to_i) if quantity.to_i > 0 end params[:products].each do |product_id,variant_id| quantity = params[:quantity].to_i if !params[:quantity].is_a?(Array) quantity = params[:quantity][variant_id].to_i if params[:quantity].is_a?(Array) @order.add_variant(Variant.find(variant_id), quantity) if quantity > 0 end if params[:products] params[:variants].each do |variant_id, quantity| quantity = quantity.to_i @order.add_variant(Variant.find(variant_id), quantity) if quantity > 0 end if params[:variants] @order.save # store order token in the session session[:order_token] = @order.token end
E _cart_form.html.erb :
<% form_for :order, :url => orders_url do |f| %> <% if product_price(@product) %> <p class="prices"> <%= t("price") %> <span class="price selling"><%= product_price(@product) %></span> </p> <% end %> <% if @product.variants? %> <div id="product-variants"> <ul> <li> <span>Qtde:</span> </li> <% @product.variants.active.each_with_index do |v,index| next if v.option_values.empty? || (!v.in_stock && !Spree::Config[:show_zero_stock_products]) %> <li> <%= variant_options v %> <%= text_field_tag (@product.variants? ? "quantities[#{v.id}]" : "variants[#{@product.variant.id}]"), 0, :class => "title", :size => 3 %> </li> <% end %> </ul> </div> <% end%> <br style="clear:both" /> <br style="clear:both" /> <% if @product.has_stock? || Spree::Config[:allow_backorders] %> <p> <button type='submit' class='large primary'> <%= image_tag('/images/add-to-cart.png') + t('add_to_cart') %> </button> </p> <% else %> <%= content_tag('strong', t('out_of_stock')) %> <% end %> <% end %>
Com isso já é possível que o cliente adicione para cada variação de produto, uma quantidade específica e possa também adiocioná-los de uma única vez.
Também devo creditar o Leandro pela solução, ele deu uma força na hora de finalizar.
No final a tela fica assim:
