2011-03-09 70 views
6

我在測試中遇到ActiveRecord serialize方法反序列化的問題。
它只是給我純String而不是我的數據Array。Rails ActiveRecord序列化方法在測試環境中不起作用

實施例:

User > ActiveRecord::Base 
    serialize :roles, Array 
end 

控制檯:

u = User.new 
u.roles = ["admin", "support"] 
u.save 
# => true 

User.first.roles 
# => ["admin", "support"] 

在測試環境:

User.first.roles 
# => "--- \n- admin\n- support\n" 

它是一個字符串。看起來,YAML序列化不在那裏工作,但我不知道該怎麼做才能使它工作。

我已經試圖找出與this,this,thisthis,但沒有運氣。

任何意見將不勝感激。
馬丁

+0

您使用的是哪種版本的導軌?你的紅寶石版本? – 2011-03-09 20:27:41

+0

Rails 3.0.4,ruby 1.8.7 – 2011-03-10 13:06:05

回答

2

畢竟爲了繞過這個,我需要直接調用數據庫中的數據,而不用參與「序列化」AR方法。

YAML::load(User.first.roles_before_type_cast) 

而現在測試環境也直接解析數據並給我正確的角色數組。

0

我不知道這是否解決您的問題,但可以使用

YAML::load("--- \n- admin\n- support\n") 
# => ["admin", "support"] 

所以隨時恢復從字符串數組,在測試環境中,您應該做的

YAML::load(User.first.roles) 
+0

它不會工作,因爲AR序列化方法在嘗試獲取數據時自動使用YAML分析:User.first.roles – 2011-03-10 14:57:35

+0

@martin ...但你說的不是在測試環境中發生.. – rubyprince 2011-03-10 14:59:51

+0

確切地說,在測試環境中,它返回的只是字符串,但我無法對開發和生產中的對象進行雙YAML :: load。 在我的對象中使用第二種方法手工分析YAML是髒的技巧。 – 2011-03-10 15:05:11

相關問題