вторник, 22 февраля 2011 г.

Выпадающее меню


Нужно было создать иерархию каталогов любой вложенности. Таблица каталогов ссылалась сама на себя. При создании нового каталога нужно чтобы пользователь выбрал родительский каталог.  Не лучшее решение, но всётаки для CMS пойдёт. Решил организовать это с помощью выпадающего списка, заодно и попрактиковатся в формах. Ну и куда же без проблем с моими знаниями?
Дело в том что везде пишут как сделать этот контрол статичным, на основе готового массива, но мало ресурсов где написано как сделать его на основе коллекции. Вообщем свою задачу я решил так:
<%= f.select(:catalog_id, options_from_collection_for_select(Catalog.all, :id, :title)) %>
:catalog_id – это параметр который нужно передавать контроллеру,  другими словами «куда пойдёт» параметр value
options_from_collection_for_select удобная вещь для выбора нужных данных,
:id – этот параметр попадёт в поле value в сгенерированном HTML
:title – параметр будет помещён между тегами <option></option>
Результат:

HTML-код:
<select id="catalog_catalog_id" name="catalog[catalog_id]">
<option value="0">root</option>
<option value="1">tolarge</option>
<option value="2">cheer</option>
</select>

Есть ещё упрощённый вариант, объединяющий select и options_from_collection_for_select. Это collection_select.

<%= f.collection_select(:catalog_id, Catalog.all, :id, :title) %>

Полный синтаксис команды: 
collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})

Комментариев нет:

Отправить комментарий