Использование импорта ar-extensions: синхронизация не работает - PullRequest
0 голосов
/ 06 апреля 2011

Я использую AR-расширения для импорта большого количества объектов в БД, но синхронизация их обратно из БД просто не работает.

МОЙ код:

posts = [Post.new(:name=>"kuku1"), Post.new(:name=>"kuku2"), ...]
Post.import posts, :synchronize=>posts

записейпередаются в БД, и каждому из них присваивается первичный ключ (id) автоматически.Но когда потом проверяю объекты в массиве posts, я вижу, что у них нет поля id, а флаг new_record все еще имеет значение true.Я также попытался добавить: reload => true, но это тоже не помогает.

Есть идеи, почему синхронизация не работает?

1 Ответ

3 голосов
/ 06 апреля 2011

Это невозможно сейчас с новыми записями. Что касается ar-extensions 0.9.3, это не будет работать при синхронизации новых записей, так как синхронизация ожидает, что записи, которые вы синхронизируете, уже существуют. Он использует первичный ключ под крышками, чтобы определить, что загружать (но с новыми записями первичный ключ равен нулю). Это ограничение * также существует в activerecord-import 0.2.5. Если вы можете синхронизироваться с другими условиями, я был бы рад выпустить новый гем, позволяющий передавать условия. Для Rails 3.x вам нужно использовать activerecord-import (он заменяет ar-extensions). Пожалуйста, создайте заявку / выпуск на github: https://github.com/zdennis/activerecord-import/issues

Для Rails 2.x вы все еще хотите использовать ar-extensions, и я, вероятно, сделаю бэкпорт для обновления activerecord-import и также добавлю новый гем. Если вам нужна эта функциональность, пожалуйста, создайте заявку / выпуск на github: https://github.com/zdennis/ar-extensions/

Патчи также приветствуются.

* Ограничение здесь - это ограничение базы данных, так как невозможно получить идентификаторы всех вновь созданных записей после одной вставки / импорта без выполнения чего-то странного, например блокировки таблицы, что я не считаю хорошим Решение этой проблемы. Если у кого-то есть идеи, я весь в ушах.

UPDATE

activerecord-import 0.2.6 и ar-extensions 0.9.4 были выпущены и включают поддержку указания полей, по которым вы хотите синхронизировать. Эти поля должны быть уникальными. См http://www.continuousthinking.com/2011/4/6/activerecord-import-0-2-6-and-ar-extensions-0-9-4

...