0

我的应用程序根据值列表(字典)管理分层分类。在某些时候,我需要从 Excel 工作表中导入父子关系,并创建持久的 ValuesToValues 对象。

基于 Ryan Bates 的RailsCast 396,我创建了主循环为的导入模型:

(2..spreadsheet.last_row).map do |i|
  # Read columns indexes
  parent = header.index("Parent") +1
  level = header.index("Level") +1
  code = header.index("Code") +1

  # Skip if parent is blank
  next if spreadsheet.cell(i, parent).blank?

  # Count links
  @links_counter += 1

  parent_values_list_id = values_lists[((spreadsheet.cell(i, level).to_i) -1)]
  child_values_list_id = values_lists[spreadsheet.cell(i, level).to_i]
  parent_value_id = Value.find_by(values_list_id: parent_values_list_id, code: spreadsheet.cell(i, parent).to_s).id
  child_value_id = Value.find_by(values_list_id: child_values_list_id, code: spreadsheet.cell(i, code).to_s).id
  link_code = "#{parent_values_list_id}/#{spreadsheet.cell(i, parent)} - #{child_values_list_id}/#{spreadsheet.cell(i, code)}"
  link_name = "#{spreadsheet.cell(i, parent)} #{spreadsheet.cell(i, code)}"

  link = ValuesToValues.new( playground_id: playground_id,
                                classification_id: @classification.id,
                                parent_values_list_id: parent_values_list_id,
                                child_values_list_id: child_values_list_id,
                                parent_value_id: parent_value_id,
                                child_value_id: child_value_id,
                                code: link_code,
                                name: link_name
                              )
end

问题是,当遇到没有父值的根值时,循环会创建一个 nil 对象,该对象不会通过后面的验证。

如何构建循环以仅考虑单元格不为空的行?

4

1 回答 1

0

我最终决定管理我自己的导入值数组,而不是使用基于过滤表行的数组。

我在主循环周围添加了以下代码:

# Create array of links
linked_values = Array.new

# start loading links for each values list
(2..spreadsheet.last_row).map do |i|
...

...
  linked_values << link
end

linked_values

然后返回linked_values 数组,它只包含有效的链接记录。

于 2020-10-21T05:55:56.207 回答