在单个提交中添加多个订单项,Spree 3,RoR 5

时间:2017-08-08 01:32:17

标签: ruby-on-rails spree

背景信息:嗨,我有一个使用Spree 3.2.0.rc1 gem的rails 5.0.3应用程序,每个功能都运行正常,我只修改了一些视图。

目标:我的商店总共销售的变种少于12个,所以我希望我的客户可以更快地将商品添加到购物车中。

问题:如何修改购物车,以便我可以使用不同的提交按钮向购物车添加多个订单项

谢谢!

1 个答案:

答案 0 :(得分:1)

为了实现目标,您可以在checkout controllercheckout创建一个单独的操作,并在那里定义您的逻辑。

它看起来像下面给出的代码片段

def checkout
  order = current_order(create_order_if_necessary: true)
  errors = []
  Variant.all.each do |variant|
    begin
      order.contents.add(variant)
    rescue ActiveRecord::RecordInvalid => e
      errors << e.record.errors.full_messages.join(", ")
    end
  end
  if errors.present?
    flash[:error] = errors
    redirect_back_or_default(spree.root_path)
  else
    flash[:success] = 'All Products added'
    respond_with(order) do |format|
      format.html { redirect_to cart_path }
    end
  end
end

您仍然可以通过移动

来重构此代码
  Variant.all.each do |variant|
    begin
      order.contents.add(variant)
    rescue ActiveRecord::RecordInvalid => e
      errors << e.record.errors.full_messages.join(", ")
    end
  end

此逻辑作为variant model中的类方法。

如果您仍然遇到任何问题,请告诉我