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
列?