我有这个通用的消息模型,它应该是涉及STI的子类,并且子类应该可以附加到不同的其他模型。
但是AR的STI魔法有点闪烁 - 在同样的要求下它有时会起作用,有时候不起作用。 Rails服务器日志显示有时当Payload访问它的 reservation_messages 关联时,IN查询部分仅包含三个可能类中的一些。 我应该在哪里预加载子类,以便它们对AR的STI始终可见?
所以我拥有:
# 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个消息类。 看起来它现在有效。