【问题标题】:How to fix or initialize constant CsvImporter::Report如何修复或初始化常量 CsvImporter::Report
【发布时间】:2020-12-17 23:35:53
【问题描述】:

我在下面有以下代码,当我运行 rake 任务时,它会抛出错误NameError: uninitialized constant CsvImporter::Report

lib/user/csv_importer.rb

# frozen_string_literal: true

require 'open-uri'
require 'csv'

class CsvImporter
  Report < Struct.new(:users) do
    def valid_count
      @valid_count ||= users.count(&:persisted?)
    end

    def invalid_count
      @invalid_count ||= total - valid_count
    end

    def total
      @total ||= users.count
    end

    def errors
      users.map do |user|
        user.errors.full_messages.to_sentence
      end.to_sentence
    end
  end

  def initialize(file_path)
    @file_path = file_path
  end

  def call
    users = valid_rows.map do |row|
      User.create(roles: [Role.find_or_create_by(name: row[:role])], email: row[:email])
    end

    Report.new(users)
  end

  private

  attr_accessor :file_path

  def valid_rows
    CSV.foreach(file_path, headers: true, header_converters: :symbol).select do |row|
      row[:email].present? && row[:password].present?
    end
  end
end

task/user/csv_importer.rake

# frozen_string_literal: true

require 'user/csv_importer'


namespace :user do
  desc "Import data from CSV file into User's table"
  task import_user: :environment do
    file_path = (File.join Rails.root, 'doc', 'user', 'user.csv')

    CsvImporter.new(file_path).call
  end
end

【问题讨论】:

    标签: ruby-on-rails ruby csv


    【解决方案1】:

    你需要改变

    Report < Struct.new(:users) do
    

    Report = Struct.new(:users) do
    

    【讨论】:

    • 那行得通。谢谢你。但 Rubocop 抱怨 Constant name Report doesn't match Regex
    • 您可以通过内联禁用特定的 rubocop 配置,或者添加 rubocop.yml
    猜你喜欢
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    相关资源
    最近更新 更多