0

我有这个通用消息模型,它应该是涉及 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 个消息类。看起来它现在有效。

4

0 回答 0