[英]Using dynamically created classes in a Single Table Inheritance mechanism
我有一個稱為'DynObject'的ActiveRecord類,該類可用於繼承。
在初始化時,我動態創建一些繼承自它的類:
classes_config = { foo: 'foo', bar: 'bar' }
classes_config.each do |name,options|
klass = Class.new( DynObject ) do
end
self.klasses[name] = const_set( "#{name.camelize}DynObject", klass )
end
一切都很好,可以很好地創建這些類。但是,當ActiveRecord嘗試加載創建的記錄時,STI機制將失敗。。 (ActiveRecord::SubclassNotFound (The single-table inheritance mechanism failed to locate the subclass: 'FooObject'....))
我認為這很奇怪,因為當我檢查類(在type
列中的命名方式)時,它們就存在了。
當我檢查這些類的ancestors
,它們也繼承得很好。
我可能要完成什么?
還有什么需要做的嗎?
您的錯誤消息表明無法找到'FooObject'類。
在您的代碼中,動態生成的類名稱應為'FooDynObject'。
只需在加載DynObject之前檢查數據庫中是否沒有舊的測試記錄即可。
@edit:另一件事是還知道影響動態類名的類。
class DynObject < ActiveRecord::Base
const_set 'FooDynObject', Class.new(DynObject)
end
將導致DynObject :: FooDynObject,並且ActiveRecord在看到“ FooDynObject”類型時將無法加載它。
就個人而言,我會做一些
class DynObject < ActiveRecord::Base
Object.const_set 'FooDynObject', Class.new(DynObject)
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.