簡體   English   中英

NoMethodError:未定義的方法“ map”為true:TrueClass用於映射標頭/創建CSV

[英]NoMethodError: undefined method `map' for true:TrueClass for mapping headers/creating CSVs

我正在下載一堆CSV,以便將它們轉儲為一個大CSV以便導出。 我正在使用Selenium / Ruby / Ruby-on-rails(?)來實現此目的。

我目前遇到的問題是我得到了

NoMethodError: undefined method `map' for true:TrueClass Did you mean? tap

對於以下代碼:

def csv_creation(source)

      l_source = {'lead_source' => source.to_s}

      input_file = Dir.glob("path_to_file/name_of_files*.csv").last

      rows = CSV.open(input_file, headers: true).map(&:to_h)

      rows.each { |h| h.merge!(l_source) }

      headers = rows.first.keys

      rows.first.keys.each { |k| puts k }

      csv_response = CSV.generate do |csv|
        csv << headers

        rows.each do |row|
          csv << row.values_at(*headers)
        end
      end

      File.open("#{source}.csv", "w") { |file| file.write(csv_response) }

      input_files = Dir.glob("#{source}*.csv")

      all_headers = input_files.reduce([]) do |all_header, file|
        header_line = File.open(file, &:gets)

        all_headers | CSV.parse_line(header_line)
      end

      CSV.open("out.csv", "a+") do |out|
        out << all_headers

        input_files.each do |file|
          CSV.foreach(file, headers: true) do |row|

            out << all_headers.map{ |header| row[header] }

          end
        end
      end
    end

在被告知我必須在rails c上運行並放入模塊之前,這段代碼已經奏效。 我沒有Ruby或RoR的經驗,但是很明顯,這種轉變破壞了我的代碼。

隨機花絮:

  • “源”保存從下拉菜單中收集的文本

  • 有問題的模塊是由我的托管公司構建的,因此我不完全確定它包含的內容-抱歉。

  • Rails c並沒有真正提供發生此錯誤的行號,但我認為它是在第二個“地圖”中發生的,因此我打印了一些行以查看是否關閉了任何內容,但什么也沒有。 它從某個地方獲得了“真實”的價值,老實說我不知道​​在哪里。 一切都應該是一個字符串。

一些見識將不勝感激。

我想我現在看到了該錯誤:正如我所評論的,

      all_headers = input_files.reduce([]) do |all_header, file|
         header_line = File.open(file, &:gets)
         all_headers | CSV.parse_line(header_line)
     end

是無意義的:請注意,在第一次執行do ...結束塊時,all_headers為nil ,因為已定義但未分配變量。 當您計算all_headers | CSV.parse_line(header_line) all_headers | CSV.parse_line(header_line) ,等效於nil | [ ... something ...] nil | [ ... something ...] ,並且計算結果為true。 每次迭代都會重復一次,最后, all_headers接收到值true

我認為您的意思是all_header | CSV.parse_line(header_line) all_header | CSV.parse_line(header_line)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM