Kri*_*ris 11 ruby ruby-on-rails
我通过包含一个模块来扩展一个类(在插件中),这是在初始化器中完成的.
require 'qwerty/core/user'
User.send :include, Qwerty::Core::Extensions::User
Run Code Online (Sandbox Code Playgroud)
但是在开发之前,每个请求(以及在控制台中调用reload!之后)都会重新加载所有模型,但由于初始化程序不会再次运行,因此不包含该模块.留下"缺少部件"的模型.
因为模型是在插件中,所以直接在类中包含代码似乎是明智的,这是通常的方法.
现在我只是添加了一个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
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
作为旁注,插件是我的,所以我可以添加代码,但模块中保存的扩展可能并不总是存在...
Kri*_*ris 11
的environment.rb
config.to_prepare do
User.send :include, Qwerty::Core::Extensions::User
end
Run Code Online (Sandbox Code Playgroud)
代码是块在开发模式中的每个请求之前运行,并且在生产模式下运行一次.
在Rails 3.x中,您可以配置块以在每次重新加载时运行(在开发模式下或何时config.cache_classes = false).这将在初始化器中进行:
ActionDispatch::Callbacks.to_prepare do
# configure stuff or initialize
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2762 次 |
| 最近记录: |