Я новичок в ROR и пытаюсь обновить приложение Rails с 4.2 до 5.2 Ruby Версия: 2.3
У меня есть модель с именем 'Рекомендации'
Ассоциация внутри это так:
class Recommendation < ActiveRecord::Base
belongs_to :state, class_name: 'WorkflowState', foreign_key: :workflow_state_id
WorkflowState является моделью и содержит список возможных состояний
class WorkflowState < ApplicationRecord
WORKFLOW_STATES = ['DRAFT',
'PENDING_APPROVAL',
'APPROVED']
def self.state_enums
hash = {}
WorkflowState.distinct.each do |state|
hash[state.to_sym] = state.id
end
hash
end
Существует также машина состояний рекомендаций, которая сопоставляет идентификатор состояния рабочего процесса с enum value
module RecommendationStateMachine
# state setting
def self.included(klass)
klass.send(:include, AASM)
klass.enum workflow_state_id: WorkflowState.state_enums
# States
klass.aasm column: :workflow_state_id, enum: true do
state :draft, initial: true
state :pending_approval
state :approved
До обновления через консоль rails
r = Recommendation.first
=> #<Recommendation id: 120463, workflow_state_id: 3>
Но после обновления через консоль rails
r = Recommendation.first
=> #<Recommendation id: 120463, workflow_state_id: "apprvoed">
Из-за этого изменения обрывается own_to поскольку workflow_state_id не совпадает с идентификатором из таблицы WorkflowState.
Я не могу понять, как это изменение может произойти после обновления. Кто-нибудь может помочь?