Как импортировать CSV в модель рельсов с несколькими отношениями внешнего ключа has_many с active_admin_import? - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь импортировать CSV-файл в модель рельсов с 3 отношениями «многие к многим» has_many. Какой лучший способ сделать это, используя гем active_admin_import?

Я впервые использую active_admin_import.

Это модель:

class Summary < ApplicationRecord
  has_many :summary_entities
  has_many :entities, through: :summary_entities
  has_many :summary_foreign_entities
  has_many :foreign_entities, through: :summary_foreign_entities
  has_many :summary_systems
  has_many :systems, through: :summary_systems
end

Заголовки столбцов CSV:

date    title   description entities    entities    entities    entities    entities    entities    entities    entities    entities    entities    systems systems systems systems systems systems systems systems systems systems systems systems foreign_entities    foreign_entities    foreign_entities    foreign_entities    foreign_entities    foreign_entities    foreign_entities    foreign_entities    foreign_entities    

Файл CSV имеет несколько столбцов для каждого атрибута has_many. Некоторые значения столбца могут быть нулевыми. Этот формат CSV работал с rails_admin_import.

Я не уверен, что лучше объединить столбцы, например:

date    title   description entities    systems     foreign_entities        

сущности, системы, ячейки foreign_entities будут иметь значения с разделителями, чтобы представлять одно или несколько отношений has_many.

Я попробовал первый формат импорта столбцов CSV-файла и получил сообщение об ошибке от activeadmin:

Error: can't write unknown attribute `entities`

Какой формат CSV мне следует использовать для представления нескольких ссылок "has_many" для active_admin_import?

После того, как я выясню формат CSV, как мне следует настроить active_admin_import для обработки столбцов с полями many_to_many? Я предполагаю, что это двухэтапный процесс:

1.) Включить новое резюме. 2.) Для каждого «лишнего» столбца вставьте строку, соответствующую этому новому атрибуту summary'a «has_many».

Как мне обработать каждый «лишний» столбец и сослаться на только что вставленный идентификатор резюме?

Может ли это быть транзакция один в один, поэтому если что-то не получается, все откатывается?

Полагаю, это примерно так:

ActiveAdmin.register Summary  do
       active_admin_import :validate => true,
                           :after_import => <Iterate through each inserted summary and add as many columns as necessary for its "has_many" attributes>
    end
...