Csv Rails将excel文件的自定义列映射到db列
我正在使用Csv Rails将excel文件的自定义列映射到db列,csv,ruby-on-rails-5,roo,Csv,Ruby On Rails 5,Roo,我正在使用Roo解析CSV文件以进行导入。一切都很完美,但有时最终用户会更改excel文件的列标题。例如,如果db列为first\u name,则用户可能会将excel文件中的标题更改为firstname。在这种情况下,很容易使用alias\u attribute方法将标题映射到正确的db列名 但是,如何处理excel中的列标题很长的情况?例如,用户的名字和姓氏的别名属性方法不能在这里使用: alias_attribute :first_name, :the user's first name
Roo
解析CSV文件以进行导入。一切都很完美,但有时最终用户会更改excel文件的列标题。例如,如果db列为first\u name
,则用户可能会将excel文件中的标题更改为firstname
。在这种情况下,很容易使用alias\u attribute
方法将标题映射到正确的db列名
但是,如何处理excel中的列标题很长的情况?例如,用户的名字和姓氏
的别名属性
方法不能在这里使用:
alias_attribute :first_name, :the user's first name and last name
如何解析csv文件中的详细或长列标题以映射到普通db列名
下面是我对roo
的实现:
def load_imported_users
spreadsheet = open_spreadsheet
header = spreadsheet.row(2)
(3..spreadsheet.last_row).map do |i|
row = Hash[[header, spreadsheet.row(i)].transpose]
user = User.find_by_national_id(row["national_id"]) || User.new
user.attributes = row.to_hash
user
end
end
如果有任何帮助,我们将不胜感激。您为什么不使用
字符串
如别名属性“first\u name”,“用户的名字和姓氏”
?符号有点像string
,没有额外的行李:)真是太棒了!映射到关联列时如何使用相同的方法?类似于alias\u属性“country\u name”,“country of origin”
但这一次,不是保存国家名称,而是将其转换为表中的country\u id
列?