【发布时间】: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