我正在将我的Rails应用程序从 v3.2升级到v4.0 。在我的User
模型中,我有一个JSON编码存储:
store :settings, accessors: [
:confirmed,
:receive_marketing_emails,
:receive_reply_emails
], coder: JSON
这可以按预期工作,序列化User.settings
并提供访问者。
然而,当我转移到Rails 4.0时,商店停止工作。当我尝试查找任何用户时出现以下错误:
JSON::ParserError: 795: unexpected token at '---
:confirmed,
:receive_marketing_emails,
:receive_reply_emails
'
任何人都可以提供任何见解吗?
答案 0 :(得分:0)
Rails 4.0已将ActiveModel :: Serializers :: JSON.include_root_in_json默认值更改为false。现在,Active Model Serializers和Active Record对象具有相同的默认行为。
我建议在访问User
实例时,json字段无法反序列化,因为它不需要root,而序列化数据则有。
要恢复为Rails 3.2行为,请将其放在config/initializers/wrap_parameters.rb
:
ActiveSupport.on_load(:active_record) do
self.include_root_in_json = true
end
答案 1 :(得分:0)
早期(ActiveRecord 3.2.8)数据存储在数据库中是YAML格式,它使用“coder:JSON”,这在ActiveRecord 4.2.4中不是这样。
因此,即使您指定coder: JSON
,数据也会被序列化为YAML,而不是JSON。奇怪。
要回答我自己的问题,在Rails 4.0中,我只需将coder: JSON
更改为coder: YAML
。