数据必须是可细胞对象的二维数组

时间:2017-01-23 12:57:26

标签: ruby-on-rails arrays ruby prawn

我尝试使用条件在表格中打印一些数据,但它返回以下错误:数据必须是可细胞对象的二维数组

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

2 个答案:

答案 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

或者您可以使用selectmap的组合:

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

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