Вы можете добавить проверку присутствия в вашей модели, синтаксис очень похож на проверку уникальности:
module CsvImporter
class User < ApplicationRecord
validates :name, :email_address, presence: true
validates :email_address, uniqueness: true
end
end
В вашем скрипте импорта вы также можете декларативно пропустить все строки, которые не соответствуют вашим критериям проверки:
CSV.foreach(filename, headers: true, header_converters: :symbol) do |row|
# Jump to the next row in the CSV because this one is no good.
next unless row[:name].present? && row[:email_address].present?
user = CsvImporter::User.create row.to_h
# . . .
end
Я должен также упомянуть, что если важно, чтобы :name
и :email_address
всегда присутствовали и никогда не были нулевыми (что, вероятно, верно), вы можете / должны добавить ограничение базы данных, чтобы убедиться, что вы действительно никогда не сможете создать User
без этих полей. Существуют некоторые методы взаимодействия с объектами ActiveRecord , которые пропускают проверки , и поэтому вы можете удивиться, если используете один из них по незнанию и создаете плохие записи.
Миграция будет выглядеть примерно так:
class AddNotNullConstraintsToUsers < ActiveRecord::Migration
def change
change_column_null :users, :name, false
change_column_null :users, :email_address, false
end
end