我尝试使用条件在表格中打印一些数据,但它返回以下错误:数据必须是可细胞对象的二维数组
data = [["Lançamento"]]
data += @lancamentos.map do |lancamento|
if lancamento.tipo == 'DESPESA'
[
lancamento.descricao_lancamento, lancamento.valor
]
end
end
pdf.table data
答案 0 :(得分:2)
应明确消除空映射的单元格:
data = [["Lançamento"]]
data += (
@lancamentos.map do |lancamento|
if lancamento.tipo == 'DESPESA'
[lancamento.descricao_lancamento, lancamento.valor]
end
end.compact # ⇐ HERE
)
pdf.table data
答案 1 :(得分:0)
它返回以下错误:
data must be a two dimensional array of cellable objects
您收到此错误的原因是data
数组包含nil
值。
考虑这个例子:
[1, 2, 3, 4, 5].map { |i| [i] if i.odd? }
#=> [[1], nil, [3], nil, [5]]
您需要[[1], [3], [5]]
。
由于您已有data
变量,因此可以使用each
代替map
:
data = [["Lançamento"]]
@lancamentos.each do |lancamento|
if lancamento.tipo == 'DESPESA'
data << [lancamento.descricao_lancamento, lancamento.valor]
end
end
pdf.table data
或者您可以使用select
和map
的组合:
data = @lancamentos.select { |l| l.tipo == 'DESPESA' }
.map { |l| [l.descricao_lancamento, l.valor] }
table([ ['Lançamento'], *data ])