【发布时间】: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