我有一个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已经完全加载了?