ruby-on-rails - 如何在通过 Spree API 创建订单时创建发货?

标签 ruby-on-rails spree

我有一个与 Spree API 集成的应用程序。在 Spree API 的默认流程中,当订单从 core.app.models.spree.order.checkout.rb 的第 90 行过渡到交付时创建发货:

before_transition :to => :delivery, :do => :create_proposed_shipments

因为我在创建订单的初始帖子中同时指定了行项目和送货地址,所以我希望 Spree 也创建发货。

到目前为止,我创建了一个 orders_controller_decorator,我在其中用原始创建代码加上对 create_proposed_shipments 的调用覆盖了 create 方法,但我从我从原始 create 方法复制的代码中获取 NameError(未初始化的常量 Order)

我当前的 orders_controller_decorator:

Spree::Api::OrdersController.class_eval do

  def create
    authorize! :create, Order
    @order = Spree::Core::Importer::Order.import(current_api_user, order_params)
    @order.create_proposed_shipments
    respond_with(@order, default_template: :show, status: 201)
  end

end

最佳答案

我的想法是正确的。通过指定模块修复与 Order 相关的 NameError 后,一切都按预期工作。

module Spree
  Api::OrdersController.class_eval do

    def create
      authorize! :create, Order
      @order = Core::Importer::Order.import(current_api_user, order_params)
      @order.create_proposed_shipments
      respond_with(@order, default_template: :show, status: 201)
    end

  end
end

或者,我也可以这样做

Spree::Api::OrdersController.class_eval do

  def create
    authorize! :create, Spree::Order
    @order = Core::Importer::Order.import(current_api_user, order_params)
    @order.create_proposed_shipments
    respond_with(@order, default_template: :show, status: 201)
  end

end

关于ruby-on-rails - 如何在通过 Spree API 创建订单时创建发货?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24914243/

相关文章:

ruby-on-rails - rails 3 : respond_with errors on undefined URL helper

javascript - 使用 javascript 提交两份表单,一份提交,一份不提交。不明白为什么?

ruby-on-rails - 无法覆盖 Spree 的 helper 方法

ruby-on-rails - ActionController 回调过滤器链是否一致?

ruby-on-rails - 如何覆盖 Spree 结帐表单和步骤流程?

Mysql2::Error: 指定的键太长;对于只有 87 个 db 字段的表,最大 key 长度为 767 字节

ruby-on-rails - Ruby on Rails - 向所有路由添加 ID 参数

ruby-on-rails - Rack 中间件 "trapping"堆栈跟踪

ruby-on-rails - 如何使用外键定义 activerecord 和 activeresource 之间的关系?

javascript - 未捕获的类型错误 : undefined is not a function for $ ('#cropbox' ). Jcrop({