Это ваша проблема:
@communities = Community.find(params[:id])
И вот почему:
<% @communities.each do |lnk| %>
<li><%= link_to lnk.name, community_path(lnk.id) %></li>
<% end %>
find
возвращает одну запись (экземпляр Community
), а не коллекцию. each
перебирает коллекцию.
Вы, вероятно, хотите что-то вроде этого:
@community = Community.find(params[:id])
@communities = Community.all
В C ++ 0x вы сможете использовать желаемый синтаксис:
vector<vector<vector<string> > > vvvs =
{ { {"x","y", ... }, ... }, ... };
Но в сегодняшнем C ++ вы ограничены использованием boost.assign , который позволяет вы делаете:
vector<string> vs1;
vs1 += "x", "y", ...;
vector<string> vs2;
...
vector<vector<string> > vvs1;
vvs1 += vs1, vs2, ...;
vector<vector<string> > vvs2;
...
vector<vector<vector<string> > > vvvs;
vvvs += vvs1, vvs2, ...;
... или используете контейнеры Qt , которые позволяют вам сделать это за один раз:
QVector<QVector<QVector<string> > > vvvs =
QVector<QVector<QVector<string> > >() << (
QVector<QVector<string> >() << (
QVector<string>() << "x", "y", ...) <<
... ) <<
...
;
Другой полусумный вариант, по крайней мере для плоских векторов, состоит в создании из массива :
string a[] = { "x", "y", "z" };
vector<string> vec(a, a + 3);
По сути, для этого нет встроенного синтаксиса, поскольку C ++ не знает о векторах ether; они просто из удобной библиотеки.
Тем не менее, если вы загружаете сложную структуру данных, вам все равно следует загрузить ее из файла или чего-то подобного; в противном случае код слишком хрупкий.