1

シナリオ:

アプリケーションの Spree チェックアウト プロセスから配送ステップを削除し、トランザクションを正常に完了することができました。

問題:

「マイアカウント」ページに移動するとnil、「配送」状態なしで完了した現在の注文の「出荷状態」列が表示されます。Spree::Orders表を確認したところnil、現在の注文の「SHIPMENT STATE」の値があります。「SHIPMENT STATE」は「Delivery」状態で決まるようです。私の理解によると、チェックアウトから「配送」状態を削除したときに、この問題が発生しました。これについて何か考えはありますか?「マイアカウント」ページのスクリーンショットを添付しました。

ここに画像の説明を入力

質問:

チェックアウト中に「支払い」ビュー内に「配送」状態ビューを結合/レンダリングすることは可能ですか? remove_checkout_step :deliveryチェックアウトから ( ) 配送状態を削除した後でも?

4

2 に答える 2

0

Spree は、配送への移行に関連する多くのことを行います。ステート マシンを変更してそのチェックアウト ステップを削除しても、これらのことはまだ実行する必要があります。

参考までに、https://gist.github.com/Senjai/bb5a4c3cf0e0b77be92f#file-checkout-rb-L89-L93を紹介します。

if states[:delivery]
  before_transition :to => :delivery, :do => :create_proposed_shipments
  before_transition :to => :delivery, :do => :ensure_available_shipping_rates
  before_transition :from => :delivery, :do => :apply_free_shipping_promotions
end

配送ステップを削除すると、create_proposed_shipments とフレンドは発生しません。

代わりに、チェックアウト コントローラーの代わりに、Spree::Order を class_eval できます。

state_machine do ブロック内で、強調表示されたイベントを別のアクションに追加できます。この場合、配信がなければ、これらのアクションを後で実行するか、支払いから移行する必要があります (あまり詳しく調べていません)。

配送方法/料金を自分で設定する必要がある場合があるため、追加の作業が必要になる場合があります。ビューはバニラ酒宴でこれを行うためです。ここでも、ステート マシンに接続できます。

ステート マシンの詳細については、 https://github.com/pluginaweek/state_machineを参照してください。

于 2014-09-08T13:57:22.277 に答える
-1

以下を実行してこれを完了しました。

「配送」状態を削除し、そのビューを「支払い」画面にレンダリングする場合は、次の手順を実行します。

ステップ 1: 「支払い」部分に移動し、「配送」画面を表示する場所に次の行を追加します。

<div>
<% @order.state = "delivery" %>
<%= render @order.state, :form => form %>
</div>

ステップ 2: このステップは、「配送」状態がチェックアウト プロセスから削除されたときに、注文に対して空白としてプロンプトが表示される Shipment_State の問題を解決します。

app/controllers/checkout_controller_decorator.rb に移動し、次のコードを貼り付けます。

Spree::CheckoutController.class_eval do

def before_payment
before_delivery
if @order.checkout_steps.include? "delivery"
  packages = @order.shipments.map { |s| s.to_package }
  @differentiator = Spree::Stock::Differentiator.new(@order, packages)
  @differentiator.missing.each do |variant, quantity|
  @order.contents.remove(variant, quantity)
  end
end
end
end

この方法は、どの画面の組み合わせにも適用できます。彼らの考えについてまくるコミュニティに向けて楽しみにしています。どんな提案でも大歓迎です。

ありがとう。

于 2013-08-08T06:39:36.387 に答える