[英]Rails monkey patch gem issue
我正在使用https://github.com/mailboxer/mailboxer,并且尝试添加自己的照片以附加到每封邮件中
在/config/initializes/extensions/mailboxer/message.rb中
Mailboxer::Message.class_eval do
has_many :photos, as: :imageable, :class_name => 'Photo'
end
这很好,除了它随机抛出一个错误:
undefined method `photos' for #<Mailboxer::Message:0x6eb0758>
当我第一次启动服务器时,它可以工作。 当我开始修改代码(可以是任何东西,与邮箱无关)时,我得到了错误。 我必须重新启动服务器才能使其再次工作。
我试图将文件放在initializes文件夹之外,并在config / boot.rb中添加包含路径作为最后一行,同样的问题。
关于为什么它失去参考的任何想法?
当Rails检测到您的代码已被修改时,它将“忘记”所有已自动加载的模型等,包括Mailboxer::Message
。 下次使用该模型时,它将从信箱gem重新加载,而不会出现猴子补丁。
为了确保您的猴子补丁“粘住”,我认为您需要给Rails一个提示,让您希望在重新加载代码时重新应用代码。 将补丁放在to_prepare
块中可能会达到目的:
Rails.application.config.to_prepare do
Mailboxer::Message.class_eval do
has_many :photos, as: :imageable, :class_name => 'Photo'
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.