2012-03-10 61 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