CSV(http://railscasts.com/episodes/396-importing-csv-and-excel)をインポートする際にRailsCastを実行した後、アップロードするファイルがCSVファイルであることを検証しようとしています。Ruby on Rails:CSVファイルを検証する
ここ https://github.com/mattfordham/csv_validatorを文書化し、ので、私のモデルは次のようになりますように私には、そうするために宝石csv_validator
を使用している
:
class Contact < ActiveRecord::Base
belongs_to :user
attr_accessor :my_csv_file
validates :my_csv_file, :csv => true
def self.to_csv(options = {})
CSV.generate(options) do |csv|
csv << column_names
all.each do |contact|
csv << contact.attributes.values_at(*column_names)
end
end
end
def self.import(file, user)
allowed_attributes = ["firstname","surname","email","user_id","created_at","updated_at", "title"]
CSV.foreach(file.path, headers: true) do |row|
contact = find_by_email_and_user_id(row["email"], user) || new
contact.user_id = user
contact.attributes = row.to_hash.select { |k,v| allowed_attributes.include? k }
contact.save!
end
end
end
しかし、私のシステムはまだ私が非CSVをインポートするために選択することができますファイル(.xlsなど)に変換され、結果のエラー:invalid byte sequence in UTF-8
が表示されます。
誰かが理由と解決方法を教えてください。
私はRailsの4.2.6を使用していますので、予めご了承ください
インポートする前にファイルの拡張子を確認することができます: 'file.path.split( '。')。last.to_s.downcase == 'csv'' – MrYoshiji
@MrYoshijiご意見ありがとうございます。この宝石が私にできることを許可するべきである特定の列のデータを検証するために –
この宝石は列のデータを取り出すことを可能にし、ロジックを「データを検証する」ようにするあなたの部分です。カラム。私はあなたがどこで始めるべきかについていくつかのヒントを望むならば、答えを掲示することができます – MrYoshiji