Trả lời của Matchu r đã truyền cảm hứng cho tôi rất nhiều và tôi đã sửa đổi nó thành các phương thức tự định nghĩa thay vì thay đổi lớp dựng sẵn (đừng làm điều này trừ khi bạn có một lý do thực sự tốt).
Ngoài việc tạo bảng, cấu trúc của Array có thể thuận tiện hơn và trực quan hơn để truy cập các phần tử.
Hãy để cho toàn bộ bảng được lưu trữ trong một mảng 2-D, nói
@table_array = [
["Name","Gender","Age"],
["Andy","M","20"],
["Mary","F","19"],
["Tony","M","18"]
]
trong đó mỗi phần tử đầu tiên đóng vai trò tiêu đề bảng và phần còn lại là nội dung bảng. Bây giờ chúng tôi có thể sử dụng bảng định dạng được định dạng tốt và thuộc tính lớp bảng để tạo mã html bảng:
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
và nhúng vào.ERB nộp
<%= ToTable(@table_array,"table").html_safe %>
đầu ra sẽ là một cái gì đó như thế này nếu u nhìn thấy từ trình duyệt
<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>
Tôi nhận thấy rằng, vì tôi đã thay đổi kịch bản, đầu ra chắc chắn không phải vậy. Chỉnh sửa chỉ trong một giây. – Matchu
Đã chỉnh sửa. Tốt hơn nhiều. – Matchu