Я пытаюсь использовать состояние "готово" отгрузки в качестве обратного вызова для специального метода, в моем "shipment_decorator.rb" у меня есть что-то вроде этого

Spree::Shipment.class_eval do
  Spree::Shipment.state_machine.after_transition to: :ready, do: :create_external_shipment

  def create_external_shipment
    'my custom method'
  end
end

Проблема в том, что по какой-то причине я не понимаю, Spree не выполняет мой собственный метод.

Я уже пробовал использовать state_machine.after_transition to: :ready, do: :create_external_shipment, self.state_machine.after_transition to: :ready, do: :create_external_shipment, я даже копирую и вставляю всю модель, чтобы полностью переопределить, но все еще не работает.

Я что-то упускаю?

Я использую стабильную версию Spree 2.2, и у меня нет расширений, добавляющих поведение к отправкам.

0
zetacu 25 Мар 2014 в 02:54

1 ответ

Лучший ответ

Я почти уверен, что конечный автомат отгрузки в данном случае не используется.

Ваш груз, вероятно, будет готов к этому:

https://github.com/spree/spree/blob/v2.2.1/core/app/models/spree/shipment.rb#L223-L226

Который вызывается отсюда:

https://github.com/spree/spree/blob/v2.2.1/core/app/models/spree/order_updater.rb#L21

Который исходит из:

https://github.com/spree/spree/blob/v2.2.1/core/app/models/spree/payment.rb#L24

Поскольку это происходит через обратные вызовы ActiveRecord, конечный автомат не вызывается, и ваш груз настраивается на готовность другими способами и не запускает событие конечного автомата. Вероятно, вам нужно будет найти альтернативное место, чтобы подключить свою логику.

2
gmacdougall 25 Мар 2014 в 22:43
Tnx вы правы, я отменяю метод update!, добавляя строку в конце.
 – 
zetacu
25 Мар 2014 в 23:28