Ниже приведен код моей модели, драгоценный камень, используемый для функциональности state_machine, называется «state_machines-activerecord»:
class Response < ApplicationRecord
state_machine initial: :created do
after_transition on: :fire_answered, do: [:run_metrics]
after_transition on: :fire_review, do: [:check_review]
event :fire_sent do
transition from: [:created, :sent], to: :sent
end
event :fire_review do
transition from: [:sent, :answered], to: :review
end
event :fire_answered do
transition from: [:sent, :review, :answered], to: :answered
end
end
before_save :set_appropriate_events
def set_appropriate_events
self.state_event = 'fire_sent' if sent_time.present? && response_time.blank?
self.state_event = 'fire_answered' if sent_time.present? && response_time.present?
self.state_event = 'fire_review' if needs_review?
end
end
Значение запуска обратного вызова «self.state_event» также устанавливается на основе условий, но событие не запускается и состояние не обновляется.