2010-09-14 3 views
3

j'ai un hachage imbriqué:Ruby Liquid Templating hash imbriqués

{ 
    :KeyA => { 
      :KeyB => "hello", 
      :KeyC => { 
         :KeyD => "foo", 
         :KeyE => "bar" 
        } 
      } 
} 

si je passe cela ERB je peux faire:

<%= config[:KeyA][:KeyC][:KeyD] %> 

et obtenez:

foo 

Cependant, cette ne fonctionne pas avec Liquid :(

Si je le fais:

Liquid::Template.parse(template).render(Hash["config" => myhash ]) 

que je peux faire:

{{ config }} 

et je reçois le pseudojson d'en haut imprimé, mais

{{ config[:KeyA] }} 

résultats dans rien :(

Est-ce liquide soutenir cela? Sinon quelles alternatives sont là pour ERB qui ne supportent cela, et de préférence me permettent de personnaliser les balises de remplacement (je ne peux pas utiliser ERB car im en cours d'exécution sur un fichier ASP qui contient des balises <%)

+0

Dans le premier bloc de code, voulez-vous dire ': KeyA' plutôt que' KeyA'? –

+0

ah bien repéré, et les autres. *corrigée* –

Répondre

1

Utilisez des points,

par exemple:

Liquid::Template.parse("{{ a[0].b[2].c }}").render('a' => [{'b'=>[1,2,{'c'=>33}]}]) 

Sortie:

=> "33" 
0

utilisation deep_stringify_keys!

liquide semble avoir des problèmes avec des symboles en tant que clés pour les objets imbriqués.