【问题标题】:Weird encoding error when saving ActiveRecord record保存 ActiveRecord 记录时出现奇怪的编码错误
【发布时间】:2012-10-01 12:36:13
【问题描述】:

我有以下情况:我的 web 服务正在接收 JSON 数据并创建模型(典型的 REST 场景)。有时我会得到一个

Encoding::CompatibilityError Exception: incompatible character encodings: ASCII-8BIT and UTF-8

保存记录时的错误消息,只能(或被)绑定到两个属性。启动调试器,将这两个属性中的任何一个设置为空字符串并保存工作,如下所示:

model = Model.new(params[:model])
model.save! # Fails with above error message

model = Model.new(params[:model])
model.attribute1 = ""
model.save! # Works

model = Model.new(params[:model])
model.attribute2 = ""
model.save! # Works too!

现在params都是从http请求中解析出来的,怎么会相互依赖呢?

有相同情况的人吗?

编辑: 我们找到了兼容性错误的原因:https://github.com/jruby/activerecord-jdbc-adapter/issues/229 看起来,JDBC 适配器在 utf-8 编码方面存在一些错误,这在传统 rubies 中已经修复了很长时间。

【问题讨论】:

  • 您是否有任何可能在属性之间创建耦合的回调(before_save 等)?即如果另一个是空白的,可能会改变一个?
  • 不,没有回调,只是对其中一个进行 validates_presence_of 验证(所以上面的例子不是 100% 正确,但是......)。
  • 全部设置为支持 utf-8。真奇怪……

标签: ruby-on-rails-3 activerecord encoding


【解决方案1】:

正如我在原始问题的编辑中添加的那样,问题是 JRuby 的 JDBC 适配器中的一个错误(我忘了将其作为约束添加,我的错!):https://github.com/jruby/activerecord-jdbc-adapter/issues/229

【讨论】:

    猜你喜欢
    • 2021-11-26
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多