ruby-on-rails - 当 Rails 重新加载类时,初始化程序中的 Controller 猴子补丁丢失

标签 ruby-on-rails ruby devise monkeypatching

我正在尝试在第三方 gem 中修改 Controller 类。准确地说,我正在尝试添加参数包装来设计 Controller 。在 initializers/wrap_parameters.rb 中,我添加了以下内容:

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

它在应用程序启动时工作得很好,但是当我修改我的 Controller 类之一时,参数包装立即停止工作。好像 Controller 类在没有上述补丁的情况下重新加载。

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

谢谢

最佳答案

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

module MyDeviseDecorator
  wrap_parameters :user, format: [:json]
end

class DeviseController < Devise.parent_controller.constantize
    extend MyDeviseDectorator
end

我的设计类名可能有误,它应该与您尝试进行 monkeypatch 的任何内容相匹配。我不是 100% 这种方法会像解决我的问题一样解决你的问题,但试一试;我会把它留作评论,但没有最低限度的代表。

关于ruby-on-rails - 当 Rails 重新加载类时,初始化程序中的 Controller 猴子补丁丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26585129/

相关文章:

ruby-on-rails - Rails 设计邮件

ruby-on-rails - 我的 Rails 应用程序突然变成只读的

ruby-on-rails - 哪里用 `FactoryGirl.build_stubbed` 哪里用RSpec的 `mock`/`double`

class_eval 的 Ruby 问题

ruby - 如何将 yaml 转换为电子表格?

ruby-on-rails - 如何在 Devise 中覆盖 valid_password?(password)

ruby-on-rails - 使用 rails 的 heroku pg 错误,说 "text"不允许使用类型修饰符

c++ - 如何将值从 C++ 可执行文件传递到 Rails 应用程序?

ruby - Ruby 和 Net::SCP 传输(套接字)的性能问题

ruby-on-rails - rails 4 : How to translate devise view?