Я пытаюсь экспортировать и импортировать две связанные модели, используя FasterCSV. Первая модель - это Задача, а вторая - PrecedingTask. Задача имеет много предыдущих задач.
Как и следовало ожидать, PrecedingTask ссылается на Task с помощью поля task_id.
Однако FasterCSV не может загрузить поле task.id из данных файла .csv. Вместо этого файл task.id заполняется с использованием автоинкремента (как обычно при запуске приложения rails).
Это нарушает связь между Task и PrecedingTask.
Есть ли способ подавления автоинкремента при использовании FasterCSV? Если нет, то каков предлагаемый обходной путь?
Вот соответствующее задание Rake:
def load_tasks
csv.foreach("db/preceding_tasks.csv") do |row|
PrecedingTask.create(
:id => row[0],
:task_id => row[1],
:predecessor_id => row[2],
:created_at => row[3],
:updated_at => row[4]
)
end
csv.foreach("db/tasks.csv") do |row|
Task.create(
:id => row[0],
:task_sequence => row[1],
:name => row[2],
:default_duration => row[3],
:alert_code => row[4],
:created_at => row[5],
:updated_at => row[6],
:optional => row[7],
:start_trigger => row[8],
:end_trigger => row[9]
)
end
end
__ _ __ _ __ ОБНОВЛЕНИЕ __ _ __ _ ___
Doh!
Оказывается, мой код Rake был в порядке, и мне не нужно делать ничего особенного с автоматическим приращением.
Проблема заключалась в том, что я не включил Task.id в список attr_accessible, поэтому он игнорировался. После этого изменения идентификаторы загружаются в том виде, в каком они появляются в файле task.csv, и автоматическое увеличение не мешает работе.