2014-10-09 106 views
0

下面是一個CSV導入器。它的工作完美,但我會通過動態定義行來使其更加健壯。動態定義CSV屬性

如何將屬性「name」替換爲在執行CSV之前定義的屬性?

For example:- name: row[1] --> name: row[attribute] 

上面的例子提示錯誤「沒有將字符串隱式轉換爲整數」,這顯然是真的。

以下是代碼。

import_attribute = import_dimension.import_attributes.first 
attribute = import_attribute.name 

CSV.foreach(Rails.root.join('tmp','uploads', csv_path), col_sep: import_source.csv_delimiter, 
    row_sep: :auto, skip_blanks: true, headers: false) do |row| 

    target.create company: self.import_source.company, code: row[0], name: row[1] 
end 
+0

您可以創建一個CSV列屬性配置列表,在你的應用程序中的散列。但只有在以下情況下才有效:您的導入CSV中的標題爲?和「標題名稱是否唯一併且不會從CSV更改爲CSV? – Surya 2014-10-09 07:30:56

+0

例如:一個CSV中的標題:「公司代碼,公司名稱」和另一個CSV中的標題:「代碼,名稱」不起作用。 – Surya 2014-10-09 07:32:18

回答

0

您可以使用一個散列,將屬性映射到它們在數組中的位置。

positions = {code: 0, name: 1} 

然後

target.create company: self.import_source.company, code: row[positions[:code]], name: row[positions[:name]]