В ruby фигурные скобки используются для описания хэш-карты, состоящей из пар ключей и значений. Квадратные скобки используются для описания массивов. Ваш дочерний атрибут не содержит пар ключ-значение, поэтому вы должны создать массив вместо хеша.
Так что вместо
:children => {
{ :title => "cheese", :active => false },
{ :title => "ham", :active => false }
}
сделать:
:children => [
{ :title => "cheese", :active => false },
{ :title => "ham", :active => false }
]
И то же самое для другого случая :children
.
Я также не уверен, чего должен достичь primary[0] =
, но он почти наверняка не делает того, чего вы хотите. Что он делает, так это назначает, устанавливает первый элемент primary
(что означает, что массив с именем primary должен существовать до этого назначения), а затем возвращает этот элемент.
Если вы хотите структурировать свой хеш так, чтобы к нему можно было обращаться, например, nav[:primary][0][:children][0]
, вы должны сделать это следующим образом:
nav = {
:primary => [
{:title => "cheddar",
:active => false,
:children => [
{ :title => "cheese", :active => false },
{ :title => "ham", :active => false }
]
},
{
:title => "gorgonzola",
#...
}]
}
Также обратите внимание, что строка @navigation
непосредственно перед назначением nav
вообще ничего не делает.