繁体   English   中英

Rails猴子贴片宝石问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM