导出CSV文件时如何拆分数组元素到不同列而非整数组填入同一列
问题根因
你当前的写法存在两个核心问题:
Array#each方法的返回值为原数组本身,你在字段数组中直接写入@user_preferences.each逻辑,等价于给外层字段数组嵌套了一个子数组,CSV生成时会将整个子数组序列化为单个字段值,因此所有内容都会挤在同一列。- 数组字面量默认会将内部的单个数组对象作为单元素处理,不会自动拆分内部元素到外层。
解决方案
使用Ruby的数组展开运算符(*),直接将@user_preferences的元素平铺到外层的字段数组中即可,修改后的代码如下:
<%= CSV.generate_line([ ... # 其他字段 *@user_preferences ], row_sep:"", col_sep: ",").html_safe %>
如果之前尝试用哈希存储数据,只需保证哈希值的顺序和表头顺序一致,取哈希值后展开即可:
<% # 假设@user_preferences = {Company: "Microsoft", Country: "USA"} %> <%= CSV.generate_line([ ... # 其他字段 *@user_preferences.values ], row_sep:"", col_sep: ",").html_safe %>
处理后外层字段数组会被展开为[其他字段1, 其他字段2, "Microsoft", "USA"]的结构,CSV生成时会自动将每个元素分配到对应列,不会出现挤在同一列的问题。
内容的提问来源于stack exchange,提问作者pinkfloyd90
相关产品推荐
相关产品推荐

