Вывод информации в виде N колонок
-
08 ноября 2008 00:03
-
Комментарии
Нашёл ещё один повод для восхищения Ruby :) Потребовалось мне расположить несколько записей из таблицы с товарами в виде небольшой таблицы размером две на три ячейки т.е. чтобы получился примерно такой результат:
Понятно что получить 6 записей из таблицы не проблема, но вот как их сгруппировать по две на ряд чтобы облегчить создание разметки? Я уже было приготовился писать велосипед, но тем не менее меня одолели сомнения: не может быть такого чтобы в Ruby или Rails не было бы какого-нибудь вспомогательного метода который бы умел группировать записи из массива или по крайней мере делать что-то подобное. И сомнения были не напрасными, буквально через несколько минут я наткнулся на метод #each_slice который делал всю грязную работу. Осталось лишь подключить библиотеку require ‘enumerator’ в контроллере и написать примерно такой код:
<table cellpadding="0" cellspacing="0">
<% @products.each_slice(2) do | product_row | %>
<tr>
<% product_row.each do | product | %>
<td>
<%= render :partial => 'product', :locals => {:product => product} %>
</td>
<% end %>
</tr>
<% end %>
</table>
Таким вот образом Ruby сэкономил мне пол часа времени :)
P.S.
Камень в сторону noobkit.com: noobkit.com почему то считает что такого метода не существует.
в формате RSS. Присоединяйся!
Комментарии
Добавить новый комментарий
Вы можете использовать следующие BBCode теги в комментариях:
| BBCode тег | Результат |
|---|---|
| [b]Жирный текст[/b] | Жирный текст |
| [i]Курсив[/i] | Курсив |
| [u]Подчёркнутый текст[/u] | Подчёркнутый текст |
| [url]http://example.com[/url] | http://example.com |
| [url=http://example.com]Example[/url] | Example |
|
[code]for message in @messages puts message.name end[/code] |
|
|
[quote] IE6 must die! [/quote] |
IE6 must die! |


Вы сильно удивитесь, что станет с таблицей, если в @products будет нечетное количество элементов. Не придумывайте велосипед, пользуйте рельсовый #in_groups_of
Тоже вариант. Спасибо :) Он кстати построен на базе each_slice.
хехе, вы сильно удивитесь что таблицы в данном случае вообще не нужны, и слайсы эти тоже, всё что надо, это список, и CSS
ul.spisok_v_2_kolonki
li
li
li
li
какой удодно длинный,
каждый li внутри этого ul class="pisok_v_2_kolonki", обладает определённой шириной, padding-ом margin-ом, и всё это задаётся так, что бы в строке помещалось только 2! элемента, остальные автоматически проваливаются ниже. работает во всех браузерах
Тоже вариант, но с таблицами мне больше нравиться, плюс ИМХО в данном случае более правильный подход с точки зрения семантики т.к. я хочу именно в виде таблицы выводить элементы, а не в виде списка.
Спасибо за идею :)