背景
我有一个 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
)被延迟,直到“主机”类完全加载?