Ответ Matchu очень вдохновил меня, и я изменил его на самоопределяемые методы вместо изменения встроенного класса (не делайте этого, если у вас нет действительно веской причины)
Кроме того, при создании таблицы структура массива может быть гораздо более удобной и интуитивно понятной для доступа к элементам.
Пусть вся таблица хранится в двумерном массиве, скажем
@table_array = [
["Name","Gender","Age"],
["Andy","M","20"],
["Mary","F","19"],
["Tony","M","18"]
]
, в котором каждый первый элемент служит заголовком таблицы, а остальные - содержимым таблицы. Теперь мы можем использовать хорошо отформатированный table_array и атрибут класса таблицы для генерации HTML-кода таблицы:
def ToCell (tag,value)
value.map{ |c| "<#{tag}>#{c}</#{tag}>" }.join
end
def ToTable (table_array, table_class)
headers = "<tr>" + ToCell('th',table_array[0]) + "</tr>"
cells = table_array[1..table_array.count].map{ |each_row|
"<tr>#{ToCell('td',each_row)}</tr>"
}.join
table = "<table class=\"#{table_class}\"><thead>#{headers}</thead><tbody>#{cells}</tbody></table>"
end
и вставьте его в файл .erb
<%= ToTable(@table_array,"table").html_safe %>
вывод будет примерно таким, если вы видите из браузера
<table class="table">
<thead>
<tr><th>Name</th><th>Gender</th><th>Age</th></tr>
</thead>
<tbody>
<tr><td>Andy</td><td>M</td><td>20</td></tr>
<tr><td>Mary</td><td>F</td><td>19</td></tr>
<tr><td>Tony</td><td>M</td><td>18</td></tr>
</tbody>
</table>