我正在尝试向全局的所有Rails模型添加一些自定义行为,而不必在每个模型文件中包含/扩展。
我尝试在config / initializers / virtual_column.rb中的初始化程序中执行此操作:
module VirtualColumns
#becomes a class-level function on any ApplicationRecord
def virtual_column ...
...
end
end
module VirtualColumnChecker
#becomes an instance function on any ApplicationRecord
def check_virtual_columns!
...
end
end
#I've tried making this work in the on_load callback, but the callback doesn't seem to execute?
#ApplicationSupport.on_load(:active_record) do
ApplicationRecord.extend VirtualColumns
ApplicationRecord.include VirtualColumnChecker
#end
最终发生的事情是它在我启动服务器时有效,但在我对我的一个应用程序文件进行更改后,rails引擎的热重新加载不会重新运行初始化程序。对virtual_column的类级调用会引发“无函数定义”错误。重新启动服务器使其再次工作。我确信这是正常行为;我认为初始化器应该在启动时运行一次,而不是在引擎热重载时。
我的问题是: 在哪里适当的地方做我想做的事情?