我有一个简单的Rails 3.1 CRUD应用程序,它是使用运行在JRuby上的Oracle构建的。模型类具有一个属性,其中二进制数据存储在Oracle blob列中。
所有这些都在3.1上运行良好,但当使用Rails 3.2运行时,它会抛出NoMethodError来查找unserializable_attribute?。我可以回到3.2,而不需要更改任何其他内容,所以很明显,这与rails版本的更改有关。
不可序列化属性?从文件activerecord-jdbc-adapter-1.2.2/lib/arjdbc/oracle/adaptor.rb 中调用
从grepping源,方法unserializable_attribute?似乎是在activerecord-3.1.3/lib/active_record/attribute_methods/read.rb中定义的。但该方法在read.rb的3.2版本中已不存在。
所以我猜测activerecordjdbc适配器需要一些更改来处理Rails3.2的更改。
还有其他人碰到这个吗?或者有如何解决的建议?
原来这个错误是在活动的recordjdbc适配器github站点上报告的,已经修复,但尚未作为新版本发布到ruby gems。
如果您有一个rails应用程序,它使用jdbc连接到数据库,并且您的任何表中都有BLOB,那么您可能需要等待升级,直到更新的适配器发布。
或者,如果您不想等待,可以应用activerecordjdbc适配器github站点上发布的直接修复程序。它的核心非常简单;只需找到对以下项的调用:unserializable_attribute?(c.name,c)并将其替换为value.is_a?(哈希)