私はオブジェクトの配列にいくつかの.csv
ファイルをロードするには、この機能を持っている:クラスの属性を取得し、それを一般的な方法で.csvヘッダーにマップする方法は?
def load_csv_data_to_order_objects
orders = []
get_data_paths("../my/path", ".csv").each do |path|
CSV.foreach(path, :headers => :first_row, :col_sep => ',', encoding: "ISO8859-1:utf-8") do |row|
orders.push Order.new(
:date => row["ORDER_DATE"],
:seller_id => row["SELLER_ID"],
:order_number => row["ORDER_NUMBER"],
:product_id => row["PRODUCT_ID"],
:quantity => row["QUANTITY"].to_i,
:sales_price => row["SALES_PRICE"].to_f,
)
end
end
orders
end
これは動作しますが、私は、オブジェクトの異なるタイプに列の数が異なる.csv
ファイルをロードする必要があります。関数の一般的な「形状」は同じですが、オブジェクトの属性が異なります。
コードの重複を最小限に抑えるために、この関数のより一般的なバージョンを作成するにはどうすればよいですか?
私はこのようなものを想像:
def load_csv_data_to_objects(search_path, file_extension, class_name)
objects = []
get_data_paths(search_path, file_extension).each do |path|
CSV.foreach(path, :headers => :first_row, :col_sep => ',', encoding: "ISO8859-1:utf-8") do |row|
objects.push class_name.new(
# How can I get a class's attributes and map them to .csv headers?
)
end
end
objects
end