2012-03-10 60 views
0

我正在使用Sinatra並使用ERB呈現視圖。 我有以下作用ERB沒有獲得本地散列值的某些值

get '/user/:id' do 
    u = @users.retrieve(params[:id]) 
    u[:mykey] = [1,2,3] 
    erb(:user, :locals => { :user => u }) 
end 

和視圖看起來像這樣

<body> 
    <h1><%= user["name"] %></h1> 

    <pre><%= user["mykey"].to_json %></pre> 

,並在那裏我期望得到[1,2,3]陣列,我得到一個大胖子null。 原始值(如名稱)通過時沒有問題。

回答

3

這是類哈希或HashWithIndifferentAccess?您正在設置user[:mykey]並檢索user["mykey"]。使用符號或字符串,除非您使用HashWithIndifferentAccess,否則不要混用它們。

+0

耶!那是票。有關如何將散列轉換爲HashWithIndifferentAccess的任何線索? – Dan 2012-03-10 17:22:45

+0

我只是要確保您訪問它們的方式一致。你可以像這樣轉換:'indifferent_hash = hash.with_indifferent_access'。你也可以在散列上調用'symbolize_keys!',它將把所有的字符串鍵轉換爲符號。 – JohnColvin 2012-03-10 17:31:11