当rails重新加载类时,初始化程序中的控制器猴子补丁会丢失

我试图在第三方gem中修补补丁控制器类。 确切地说,我正在尝试添加参数包装来设计控制器。 在initializers/wrap_parameters.rb我添加了以下内容:

 Rails.application.config.after_initialize do DeviseController.class_eval do wrap_parameters :user, format: [:json] end end 

它在应用程序启动时运行良好,但是当我修改其中一个控制器类时,参数包装会立即停止工作。 好像在没有上述补丁的情况下重新加载控制器类。

如何使我的猴子补丁持久?

谢谢

我之前遇到过类似的问题,试图在rails中加载延迟加载的monkeypatch代码。 我能够通过将补丁包装在模块中然后在您正在编辑的类中扩展模块来修复它。 在config / initializers中的新文件中会出现这样的情况:

 module MyDeviseDecorator wrap_parameters :user, format: [:json] end class DeviseController < Devise.parent_controller.constantize extend MyDeviseDectorator end 

我可能有一个设计类名称错误,它应该匹配你想要monkeypatch的任何东西。 我不是100%这个方法会修复你的问题,就像它固定我的但尝试一下; 我会留下这个评论,但没有最低代表。

Interesting Posts