2010-06-18 3 views
0

Je suis assez nouveau à ruby, je continue à obtenir l'erreur suivante:quoi de mal avec ce hachis rubis?

in gem_original_require': ./helpers/navigation.rb:28: odd number list for Hash (SyntaxError)

Toute aide appréciée ...

module Sinatra::Navigation 

     def navigation 

      @navigation 

       nav = { 

         primary[0] = { 
         :title => "cheddar", 
         :active => false, 
         :children => { 
          { :title => "cheese", :active => false }, 
          { :title => "ham", :active => false } 
          } 
         }, 

         primary[1] = { 
         :title => "gorgonzola", 
         :active => false, 
         :children => { 
          { :title => "What is the cheese?", :active => false }, 
          { :title => "What cheese", :active => false }, 
          { :title => "What does the cheese tell us?", :active => false, :children => { 
           { :title => "Cheessus", :active => false }, 
           { :title => "The impact of different cheeses/characteristics for cheese in relation to CHSE outcomes", :active => false } 
          } 
          } 
          } 
         } 
       } 
+0

Cette indentation est horrible! –

Répondre

6

En ruby ​​accolades sont utilisés pour décrire un composé hashmap des paires de clés et de valeurs. Les crochets sont utilisés pour décrire les tableaux. L'attribut de votre enfant ne contient pas de paire clé-valeur, donc vous devez faire un tableau plutôt qu'un hachage.

Ainsi, au lieu de

:children => { 
    { :title => "cheese", :active => false }, 
    { :title => "ham", :active => false } 
} 

faire:

:children => [ 
    { :title => "cheese", :active => false }, 
    { :title => "ham", :active => false } 
] 

Et même pour l'autre occurrence de :children.

Je ne suis pas sûr de ce que primary[0] = est censé accomplir, mais il ne fait presque certainement pas ce que vous voulez. Ce qu'il fait est assign est défini le premier élément de primary (ce qui signifie qu'un tableau appelé primaire doit exister avant cette affectation), puis retourner cet élément.

Si vous voulez structurer votre hachage afin qu'il puisse être accessible comme nav[:primary][0][:children][0], vous devez le faire comme ceci:

nav = { 
    :primary => [ 
    {:title => "cheddar", 
    :active => false, 
    :children => [ 
        { :title => "cheese", :active => false }, 
        { :title => "ham", :active => false } 
        ] 
    }, 
    { 
     :title => "gorgonzola", 
     #... 
    }] 
} 

Notez également que la ligne @navigation juste avant que vous attribuez à nav ne fait rien tout.

+0

Et la variable principale 'nav'? – MvanGeest

+0

Toutes les réponses semblent correctes donc merci à tous, c'était plus rapide et était vraiment concis, maintenant élargi, apprécié –

+0

Merci encore pour cette réponse, vous avez vraiment regardé au-delà de l'appel du devoir ici, votre conseil m'a aidé sans fin, je Je l'ai restructuré de cette façon et de façon plus directe. –

1

Dans le premier hachage, vous avez

:children => { 
    { :title => "cheese", :active => false }, 
    { :title => "ham", :active => false } 
} 

Votre: hachage des enfants doit être un tableau, construit avec des crochets au lieu d'accolades :)

+0

Btw, vous faites cela plus qu'une seule fois dans votre code :) –

1

Je pense que vous pourriez être confus avec des tableaux hash . Il y a (je pense) deux points dans lesquels vous voulez probablement utiliser un tableau [] au lieu d'un hachage {}. Code fixe comme suit:

nav = [ 
     { :title => "cheddar", 
     :active => false, 
     :children => [ 
      { :title => "cheese", :active => false }, 
      { :title => "ham", :active => false } 
      ] 
     }, 
     { :title => "gorgonzola", 
      :active => false, 
      :children => [ 
      { :title => "What is the cheese?", :active => false }, 
      { :title => "What cheese", :active => false }, 
      { :title => "What does the cheese tell us?", :active => false, 
      :children => [ 
       { :title => "Cheessus", :active => false }, 
       { :title => "The impact of different cheeses/characteristics for cheese in relation to CHSE outcomes", :active => false } 
      ] 
      }] 
     } 
    ] 
Questions connexes