我想通过自动包含的问题为所有模型添加一些特定于管理员的代码。我正在使用命名约定MyModel
=> MyModelAdmin
并且它们位于标准的Rails目录app/models/concerns/my_model_admin.rb
中。然后我可以对所有这些进行全局操作并执行MyModel.include(MyModelAdmin)
。
动态包括正常工作,但在更改开发中的关注时,Rails不会正确地重新加载它。事实上,这种担忧似乎已被消除。
应用程序/模型/ my_model.rb
class MyModel
end
应用程序/模型/关切/ my_model_admin.rb
module MyModelAdmin
extend ActiveSupport::Concern
def say
"moo"
end
end
配置/初始化/ .RB
MyModel.include(MyModelAdmin)
到目前为止一切顺利,MyModel.new.say == "moo"
但现在改变说“baa”,你得到NoMethodError undefined method 'say'
。
我尝试了许多没有帮助的事情:
require_dependency
Model.class_eval "include ModelAdministration"
config.autoload_paths
ApplicationModel
中使用另一个显式问题,并使用included
挂钩,其中包含每个模型中的特定问题。ActiveSupport.on_load
仅在Base上触发而不是每个模型。这是否意味着Rails只能使用静态范围进行自动加载?我猜Rails认为关注点发生变化,知道模型是否包含它,重新加载模型但是静态模型定义没有包含因此关注会丢失并停止跟踪。有没有办法强制Rails跟踪动态包含的模块?