У меня есть эта общая модель сообщения , которая должна быть разделена на подклассы с использованием STI, а подклассы должны быть присоединяемыми к другим другим моделям.
Но волшебство STI в AR немного мерцает - по одному и тому же запросу иногда работает, а иногда нет.
Журнал сервера Rails показывает, что иногда, когда Payload обращается к своей ассоциации booking_messages , часть запроса IN содержит только некоторые из трех возможных классов.
Где я должен предварительно загрузить подклассы, чтобы они всегда были видны для STI AR?
Так что у меня есть:
# models/message.rb
class Message < ActiveRecord::Base
end
##############
# models/reservation_message.rb
class ReservationMessage < Message
belongs_to :payload, foreign_key: :record_id
end
# tried to load subclasses manually but it doesn't help
require_relative 'reservation_email'
require_relative 'reservation_comment'
#########################
# models/reservation_email.rb
class ReservationEmail < ReservationMessage
end
#########################
# models/reservation_comment.rb
class ReservationComment < ReservationMessage
end
#########################
# models/payload.rb
class Payload < ActiveRecord::Base
has_many :reservation_messages, foreign_key: :record_id
end
# tried to load subclasses manually but it doesn't help
require_relative 'reservation_email'
require_relative 'reservation_comment'
#########################
ОБНОВЛЕНИЕ 1
Сделал пользовательский инициализатор, где мне просто потребовались все 4 класса сообщений.
Похоже, сейчас это работает.