ruby-on-rails – 如何从初始化程序扩展类,并在开发环境中重新加载?

我通过包含一个模块来扩展一个类(它在一个插件中),这在一个初始化器中完成.

require 'qwerty/core/user'
User.send :include, Qwerty::Core::Extensions::User

然而,在开发每个请求之前(并且在重新加载之后,在控制台中被调用),所有的模型都被重新加载,但由于初始化器不再运行,所以不包括模块.留下“缺少零件”的模型.

因为这个模型是一个插件,所以将代码直接包含在通常的方法中似乎并不明智.

现在我只是在开发环境中添加了一个包含该模块的before_filter.但是我已经在初始化程序和应用程序控制器中复制/粘贴了重复的代码.

  # Class extensions in initalizers are over-writtern each request
  def development_loading
    if RAILS_ENV == 'development'      
      User.send :include, Qwerty::Core::Extensions::User
    end
  end

有没有更好的办法?

作为附注,插件是我的,所以我可以添加代码,但模块中保留的扩展可能不总是存在…

的environment.rb

config.to_prepare do
  User.send :include, Qwerty::Core::Extensions::User
end

代码是在开发模式中的每个请求之前运行的块,并且在生产模式下运行一次.

翻译自:https://stackoverflow.com/questions/1531470/how-to-extend-a-class-from-an-initializer-and-have-it-reload-in-development-envi

转载注明原文:ruby-on-rails – 如何从初始化程序扩展类,并在开发环境中重新加载?