2

我有一个使用在 JRuby 上运行的 Oracle 构建的简单 Rails 3.1 CRUD 应用程序。模型类具有存储在 Oracle blob 列中的二进制数据的属性。

在 3.1 上一切正常,但在使用 Rails 3.2 运行时,它会抛出 NoMethodError 寻找 unserializable_attribute?。我可以回到 3.2 而无需更改任何其他内容,因此很明显它与 rails 版本的更改有关。

unserializable_attribute?从文件 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 版本中已经不存在了。

所以我猜测 activerecord-jdbc-adapter 需要一些更改才能与 Rails 3.2 的更改一起使用。

还有其他人遇到这个吗?或有如何解决的建议?

4

1 回答 1

4

事实证明,此错误已在活动的 recordjdbc-adapter github 站点上报告,已修复,但尚未作为 ruby​​ gems 的新版本发布。

如果您有一个使用 jdbc 连接到数据库的 rails 应用程序,并且您的任何表中都有 BLOB,那么您可能希望等到更新的适配器发布后再升级。

或者,如果您不想等待,您可以应用在 activerecordjdbc-adapter github 站点上发布的直接修复。它的核心非常简单;只需找到对 :unserializable_attribute?(c.name, c) 的调用并将其替换为 value.is_a?(Hash)

于 2012-02-10T15:26:11.083 回答