#ruby-on-rails #ruby #csv
#ruby-on-rails #ruby #csv
Вопрос:
У меня есть следующий код ниже, и когда я запускаю задачу 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(amp;: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? amp;amp; row[:password].present?
end
end
end
задача / пользователь/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
Ответ №1:
Вам нужно изменить
Report < Struct.new(:users) do
Для
Report = Struct.new(:users) do
Комментарии:
1. Это работает. Спасибо. Но Rubocop жаловался
Constant name Report doesn't match Regex
2. Вы можете отключить определенную конфигурацию rubocop, встроив или добавив rubocop.yml