2016-07-15 107 views
0

我正在將我的Rails應用程序從v3.2升級到v4.0。在我User模型我有一個JSON編碼存儲:從3.2升級到Rails 4.0時,存儲停止工作

store :settings, accessors: [ 
    :confirmed, 
    :receive_marketing_emails, 
    :receive_reply_emails 
], coder: JSON 

可正常工作,序列化User.settings並提供存取。

但是,當我移動到Rails 4.0時,Store停止工作。當我嘗試查找任何用戶時,出現以下錯誤:

JSON::ParserError: 795: unexpected token at '--- 
:confirmed, 
:receive_marketing_emails, 
:receive_reply_emails 
' 

任何人都可以提供任何見解嗎?

回答

0

this question's answer

早些時候(ActiveRecord的3.2.8)的數據存儲在數據庫中YAML格式,並且它正在使用「編碼器:JSON」,這在ActiveRecord 4.2.4中不是這種情況。

因此,即使您指定coder: JSON,數據也被序列化爲YAML,而不是JSON。奇怪。

要回答我自己的問題,在Rails 4.0中,我只需將coder: JSON更改爲coder: YAML

0

有這種說法在Rails Upgrade Guide

的Rails 4.0已經加載ActiveModel改變串行器:: :: JSON.include_root_in_json默認值設置爲false。現在,Active Model Serializer和Active Record對象具有相同的默認行爲。

我建議,當你訪問一個User例如,JSON字段不能被反序列化,因爲它預期沒有根,而串行數據有它。

要恢復到Rails 3.2的行爲,把這個在您的config/initializers/wrap_parameters.rb

ActiveSupport.on_load(:active_record) do 
    self.include_root_in_json = true 
end 
+0

嗨尼克感謝您的迴應!實際上我們已經將'include_root_in_json'從3.2開始設置爲false,所以序列化的數據永遠不會有根,對吧? –

+1

在這種情況下,我的建議可能不相關。爲了確定根是否到位,您應該檢查數據庫中的原始數據。 –

相關問題