未初始化的常量OCI8 :: Object :: Mdsys :: SdoGeometry

时间:2012-12-25 13:45:39

标签: ruby oracle activerecord

出于某些原因,我需要修补oracle增强适配器。

在我的oracle_enhanced_adapter.rb文件中,我需要获取OCI8 :: Object :: Mdsys :: SdoGeometry.new返回值,但它返回未初始化的常量 OCI8 :: Object :: Mdsys :: SdoGeometry

但是,如果在执行OCI8 :: Object :: Mdsys :: SdoGeometry.new命令之前,我执行OnlineGpsPoint.first命令(OnlineGpsPoint包含一个sdo_geometry列)并获取表中的一行,OCI8 :: Object: :Mdsys :: SdoGeometry将被初始化。

问题是我不想在我的程序中使用硬编码的“OnlineGpsPoint”。我只需要OCI8 :: Object :: Mdsys :: SdoGeometry值。

是否有解决疼痛的方法?

1 个答案:

答案 0 :(得分:1)

当ruby-oci8找到未知对象类型时,它会自动在OCI8 :: Object下定义一个ruby类。如果您知道对象类型名称,最好事先定义ruby类,如下所示:

# Oracle object type name is *guessed* from the ruby class name.
#   SdoGeometry => SDO_GEOMETRY ==(public synonym)=> MDSYS.SDO_GEOMETRY
class SdoGeometry < OCI8::Object::Base
end

# Set Oracle object type name explicitly
class AnyClassName < OCI8::Object::Base
  set_typename('MDSYS.SDO_GEOMETRY')
end

如果您想在自动生成的类中使用相同的名称:

module OCI8::Object::Mdsys
  class SdoGeometry < OCI8::Object::Base
    set_typename('MDSYS.SDO_GEOMETRY')
  end
end