【问题标题】:Rails monkey patch gem issueRails猴子补丁宝石问题
【发布时间】:2015-08-21 02:42:06
【问题描述】:

我正在使用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>

当我第一次启动服务器时,它就可以工作了。当我开始修改代码(可以是任何东西,与邮箱无关)时,我得到了错误。我必须重新启动服务器才能让它再次工作。

我尝试将文件放在初始化文件夹之外,并在 config/boot.rb 的最后一行添加包含路径,同样的问题。

关于它为什么失去参考的任何想法?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    当 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
    

    【讨论】:

    • 这似乎已经修复了,让我给它一个小时左右,看看会发生什么。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2011-01-14
    • 2011-03-26
    • 1970-01-01
    • 2016-09-01
    相关资源
    最近更新 更多