在" host"之后执行关注代码class已满载

时间:2018-02-19 14:09:05

标签: ruby activerecord activesupport-concern

背景

我有一个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

当我运行这个(好吧,类似的东西)时,我会得到&#34;你好&#34;异常,因为在include Xyz时,尚未设置自定义表名,因此 - 此时 - table_exists?正确false

如果我切换线条,一切正常(即,也不例外):

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

问题

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

有没有办法修改模块定义,以便我的代码(在这个受保护的示例中,raise)被延迟到&#34; host&#34; class已经完全加载了?

0 个答案:

没有答案