如何将tally统计的数组计数结果以规范HTML表格格式正确展示
错误原因
你的代码无法正常渲染有三个核心问题:
- Ruby哈希调用
each遍历的时候,如果块只写1个接收参数,拿到的是[键, 值]结构的二元数组,不是单独的键对象 - 你遍历得到的键本身是普通字符串,不存在
name、count这两个实例方法,try调用只会返回nil - ERB语法中
<% %>仅执行代码不输出渲染结果,要把内容输出到页面必须用<%= %>标签;另外tally是数组的统计方法,你持有的已经是统计完成的哈希,直接调用tally只会把哈希对象转成字符串输出,不会做格式转换。
正确实现代码
直接按键值对拆分遍历哈希即可,可直接使用的ERB代码如下:
<table> <tr> <th>名称</th> <th>计数</th> </tr> <% @array.each do |rating_name, count| %> <tr> <td><%= rating_name %></td> <td><%= count %></td> </tr> <% end %> </table>
渲染后会得到结构规整的两列表格,对应你给出的测试数据,输出效果等价于:
| 名称 | 计数 |
|---|---|
| Very Good | 24 |
| Good | 81 |
| Regular | 3 |
| Bad | 1 |
| Very Bad | 1 |
注意事项
- 如果你是从原始数组开始做统计,要确保
tally方法执行在原始数组上,生成计数哈希后再传入模板遍历:
# 原始评分列表示例 raw_rating_list = ["Very Good", "Good", "Good", "Regular", ...] # 统计各评分出现次数,生成你需要的计数哈希 @rating_count = raw_rating_list.tally
- 表头单元格建议使用
<th>标签替代<td>,语义更符合HTML规范,浏览器默认会给表头添加加粗居中的展示样式 - Ruby遍历哈希时推荐直接写两个块参数接收键和值,比手动取数组下标的写法可读性更高,也不容易出错
内容的提问来源于stack exchange,提问作者Carlos Morales
相关产品推荐
相关产品推荐

