0

背景

我有一个 ActiveRecord 问题,它执行以下操作:

module Xyz
   extend ActiveSupport::Concern
   included do

      raise "hello" unless table_exists?

      # ... here comes the real stuff, which requires 
      # the table/column definitions to be available ...
   end
end

class MyModel < ActiveRecord::Base
  include Xyz      
  self.table_name = 'real_table_name'
end

当我运行这个(嗯,类似的东西)时,我会得到“hello”异常,因为在 的时候include Xyz,自定义表名还没有设置,所以 - 在这个时间点 - table_exists?是正确的false

如果我切换线路,一切正常(即,没有例外):

class MyModel < ActiveRecord::Base
  self.table_name = 'real_table_name'
  include Xyz      
end

问题

现在的行为(两种情况)完全正常且符合预期,但对调用者来说有点不舒服。

有没有办法修改模块定义,以便我的代码(在这个人为的例子中,raise)被延迟,直到“主机”类完全加载?

4

0 回答 0