我正在努力 宝石 在ActiveRecord模型上设置属性(例如 table_name
)动态地基于用户配置选项。
我有一个初始化器来实现这一目标。然而,我的问题是在开发模式下,这些类被重新加载,因此它们不会维护这些值。
所以我以为我会使用一个铁路来挂钩重新加载这些文件并在模型上再次运行我的配置。然而我的问题是 config.to_prepare
在铁路上似乎跑了之前 reload!
实际上发生了。我可以通过一些记录来证明这一点:
module MyMod
class Railtie < Rails::Railtie
config.to_prepare do
Rails.logger.debug("Contact object_id: #{Contact.object_id}")
end
end
end
如果我加载我的控制台,我得到第一个日志:
Contact object_id: 2202692040
如果我检查 Contact.object_id
它匹配:
Contact.object_id #=> 2202692040
然后我 reload!
reload!
我的Rails记录器 to_prepare
日志:
Contact object_id: 2202692040
所以它仍然有旧的object_id,但是当我在控制台中检查它时:
Contact.object_id #=> 2197355080
哪个是新加载的类对象id。
那我该怎么办? to_prepare
跑步 后 文件重新加载?运用 Rails 3.0.10
更新
我也试过手动将此动作附加到 after_prepare
回调 ActionDispatch::Callbacks
像这样:
initializer "apartment.init" do
ActionDispatch::Callbacks.set_callback(:prepare, :after) do
Rails.logger.debug("Contact object_id: #{Contact.object_id}")
end
end
确实在它之后运行回调 config.to_prepare
但它似乎仍然会发生 before
重新加载文件...我得到与上面相同的行为。