Ruby on rails 写入csv忽略了第一行

Ruby on rails 写入csv忽略了第一行,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在使用下面的代码将Hashmap写入一个带有标题的csv文件。但是,我注意到第一个数据行在文件中不可用。我可以准确地显示标题和所有其他行 def self.execute_auto_pg_debtors pg_debtors_dt_list partition_key = Date.today.prev_day.prev_day.strftime "%Y%m%d" csvfilename = "PG_Debtors_" + partition_key + ".CSV" pg_

我正在使用下面的代码将Hashmap写入一个带有标题的csv文件。但是,我注意到第一个数据行在文件中不可用。我可以准确地显示标题和所有其他行

def self.execute_auto_pg_debtors pg_debtors_dt_list

  partition_key = Date.today.prev_day.prev_day.strftime "%Y%m%d"
  csvfilename = "PG_Debtors_" + partition_key + ".CSV"

  pg_debtors_dt_batch = Array.new 
  rowid = 0

  pg_debtors_dt_list.each { |x|
    pg_debtors_details = Hash.new
    pg_debtors_details["Store_Order_Id"] = x['Store_Order_Id']
    pg_debtors_details["Transaction_Id"] = x['Transaction_Id']
    pg_debtors_details["Gateway_Payment_Id"] = x['Gateway_Payment_Id']
    pg_debtors_details["PPS_Id"] = x['PPS_Id']
    pg_debtors_details["Event_Type"] = x['Event_Type']
    pg_debtors_details["Event_Date"] = x['Event_Date']
    pg_debtors_details["Gateway_Name"] = x['Gateway_Name']
    pg_debtors_details["Open_Amount"] = "%f" % x['Open_Amount']
    pg_debtors_details["Invoice_No"] = x['Invoice_No']

    pg_debtors_dt_batch << pg_debtors_details

    rowid += 1
    if rowid == 1
      CSV.open(csvfilename, "w")  do |csv|
        csv << pg_debtors_details.keys# adding header row (column labels)

    end
  else
      CSV.open(csvfilename, "a")  do |csv|
      csv << pg_debtors_details.values# of if/else inside hsh
  end# of hsh's (rows)
end# of csv open
}

  return pg_debtors_dt_batch
end
def self.execute\u auto\u pg\u债务人pg\u债务人dt\u列表
partition\u key=Date.today.prev\u day.prev\u day.strftime“%Y%m%d”
csvfilename=“PG_债务人”+分区_键+”.CSV”
pg_债务人_dt_批次=Array.new
rowid=0
pg|U债务人名单。每个{124; x|
pg_债务人_详情=Hash.new
pg\U债务人详细信息[“门店订单Id”]=x[“门店订单Id”]
pg债务人详细信息[“交易Id”]=x[“交易Id”]
pg债务人详细信息[“网关支付Id”]=x[“网关支付Id”]
pg_债务人详细信息[“PPS_Id”]=x[“PPS_Id”]
pg债务人详细信息[“事件类型”]=x[“事件类型”]
pg_债务人详细信息[“事件日期”]=x[“事件日期”]
pg_债务人详细信息[“网关名称”]=x[“网关名称”]
pg_债务人详细信息[“未清金额”]=“f”%x[“未清金额”]
pg_债务人详细信息[“发票编号”]=x[“发票编号”]

pg_debtors_dt_batch您正在写入标题,而不是第一行

我建议您打开该文件并在
CSV.open do…end


如果rowid==1,则不要在
之后使用
else
。只需对每个
值执行该操作,这样就不会跳过数据行1

您正在写入标题,而不是第一行

我建议您打开该文件并在
CSV.open do…end


如果rowid==1,则不要在
之后使用
else
。只需对每个
值执行该操作,这样就不会跳过数据行1

,即使检查
rowid
。每个
循环仍然不知道它。因此,对于
rowid==1
,它将写入头,但在下一次迭代中,
 x
将指向
pg\u债务人列表中的第二项

要解决此问题,请按以下顺序编写代码:

  • 打开文件,首先写入标题
  • 循环浏览pg_债务人列表
  • ,并将后续数据写入文件
    希望有帮助。

    即使您检查
    rowid
    。每个
    循环仍然没有意识到它。因此,对于
    rowid==1
    ,它将写入标题,但在下一次迭代中,
    x
    将指向
    pg\u deborts\u dtu列表中的第二项

    要解决此问题,请按以下顺序编写代码:

  • 打开文件,首先写入标题
  • 循环浏览pg_债务人列表
  • ,并将后续数据写入文件 希望能有帮助