Heisenbug在STI铁路活动记录中

时间:2012-03-01 07:59:40

标签: ruby-on-rails activerecord sti

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

0 个答案:

没有答案