我正在使用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中添加一个包含路径作为最后一行,同样的问题。
关于为何失去参考的任何想法?
答案 0 :(得分:2)
当Rails检测到您的代码已被修改时,它会忘记&#34;它已自动加载的所有模型等,包括Mailboxer::Message
。下次使用该模型时,它将从邮箱gem中重新加载,而不会使用猴子补丁。
为了确保你的猴子补丁&#34;坚持&#34;,我认为你需要给Rails一个提示,你希望你的代码在重新加载时重新应用。将补丁放在to_prepare
块中可能会起到作用:
Rails.application.config.to_prepare do
Mailboxer::Message.class_eval do
has_many :photos, as: :imageable, :class_name => 'Photo'
end
end