数据必须是可单元格对象的二维数组

data must be a two dimensional array of cellable objects

我正在尝试使用条件在 table 中打印一些数据,但是 returns 出现以下错误:数据必须是可单元格对象的二维数组

data = [["Lançamento"]]
data += @lancamentos.map do |lancamento|
  if lancamento.tipo == 'DESPESA'
    [
      lancamento.descricao_lancamento, lancamento.valor
    ]
  end
end
pdf.table data

应明确删除空映射单元格:

data = [["Lançamento"]]
data += (
  @lancamentos.map do |lancamento|
    if lancamento.tipo == 'DESPESA'
      [lancamento.descricao_lancamento, lancamento.valor]
    end          
  end.compact # ⇐ HERE
)

pdf.table data

it returns the following error: 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

或者您可以组合使用 selectmap:

data = @lancamentos.select { |l| l.tipo == 'DESPESA' }
                   .map    { |l| [l.descricao_lancamento, l.valor] }

table([ ['Lançamento'], *data ])