Гейзенбуг в НИИ рельсов активной записи - PullRequest
0 голосов
/ 01 марта 2012

У меня есть эта общая модель сообщения , которая должна быть разделена на подклассы с использованием 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 класса сообщений. Похоже, сейчас это работает.

...