2011-04-28 59 views
0

我有一個稱爲統計模型,其具有包含Goals值字段(一個自定義的類的)數據序列化的對象不被轉換

class Statistic < ActiveRecord::Base 
    serialize :value 
end 

當我嘗試訪問goals_against(這些目標類的一個atr_reader )我得到

undefined method `goals_against' for #<String:0x54f8400> 

Value屬性包含以下數據:

--- !ruby/object:Goals \ngoals: {}\n\ngoals_against: 1\ngoals_for: 0\nversion: 1\n 

根據調試器的字符串格式。

看來,rails不知道這個數據是Goals類型。

有人知道如何解決這個問題嗎?

感謝

回答

1

三件事:

首先,在以往任何時候你的目標類別的定義,確保它被裝載。在某些時候,Rails停止了自動加載lib文件夾中的東西。因此,如果您的額外類位於哪裏,請將它們設置爲config.autoload_paths(在config/application.rb中)。

其次,當您將列聲明爲序列化時,您可以選擇指定類。當你使用自定義類並且你想確保Rails正確地進行轉換時,這是特別有用的。

serialize :value, Goal 

第三,當你有一個序列化的列,確保你有足夠的空間。換句話說,大多數情況下你希望這個列在你的模式中是「文本」而不​​是「字符串」(否則你的sql引擎會默默地截斷任何太大而不適合字符串列的東西,你會最終保存一個破碎的物體)。

+0

感謝您的回覆。我改變了serialize:value,Goals和現在獲得的值應該是一個目標,但是是一個String – Tarscher 2011-04-28 14:08:24

相關問題