如何正确定制/扩展ApplicationRecord行为

时间:2018-01-17 19:04:34

标签: ruby-on-rails

我正在尝试向全局的所有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的类级调用会引发“无函数定义”错误。重新启动服务器使其再次工作。我确信这是正常行为;我认为初始化器应该在启动时运行一次,而不是在引擎热重载时。

我的问题是: 在哪里适当的地方做我想做的事情?

0 个答案:

没有答案