2012-05-06 29 views
3

在Rails 3.2應用程序中,我有一個帶有文本列:data的模型。在模型中我有:如何檢索序列化數據?

class Model 
    serialize :data, Hash 
end 

這是正確存儲數據,格式爲data:{"attr1"=>"foo", "attr2"=>"bar"....}

如果我想在節目視圖中顯示該節目,我可以做<%= @model.data %>,並且整個散列都會被渲染。

但是如果我只需要呈現特定的屬性呢?這可能嗎?這似乎像他們可能工作

我試過幾種方法: - 生成undefined method 'attr1' <%- @model.data[:attr1] %> -

<%= @model.data.attr1 %>無顯示

我缺少的東西? 。 感謝任何指針

回答

8
<%- @model.data[:attr1] %> 

替換:

<%= @model.data["attr1"] %> 

注意。你錯誤地使用了​​3210。

UPD:

我建議使用HashWithIndifferentAccess

serialize :data, HashWithIndifferentAccess 

這樣,您就可以通過符號或字符串作爲鍵獲取自己的價值觀。

+0

doh!這就說得通了。謝謝!你能推薦任何有關HashWithIndifferentAccess的好信息嗎?從我的搜索中,它似乎並沒有很好覆蓋。它被廣泛使用,或可能被棄用?我喜歡語法的簡易性,但不希望被留下高和乾燥:) –

+0

沒有什麼可以解釋的,因爲這個類具有'Hash',因爲它是父類,並且允許使用符號而不是密鑰。但是這個類被Rails廣泛使用。甚至更多:ActiveSupport將方法'with_indifferent_access'添加到'Hash'本身以返回'HashWithIndifferentAccess'實例。嘗試在你的任何視圖中放入'<%= params.class%>'並且看看你自己並不是在開玩笑) – jdoe

2

你試過哈希密鑰的字符串格式嗎?在開始<%=

@model.data['attr1'] 
+0

謝謝Suborx,我應該試過這個,但沒有!我將jdoe的答案授予了額外的序列化信息,但是有一個標記。 –

+0

+1也是)時間說你是第一個。 – jdoe

+0

謝謝你們,我也在發現後立即回覆jdoes的回答。現在+1的問題。 ;) – Suborx