2011-04-06 32 views
0

我使用AR-擴展到進口大量對象數據庫的同步不起作用,但synching他們DB回來只是不工作。使用AR-擴展進口:

MY代碼:

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

帖子被提交到數據庫,並且每一個被分配有主鍵(ID)自動完成。但是當事後檢查posts數組中的對象時,我發現它們沒有id字段,並且new_record標誌仍然爲true。 我也嘗試加入:reload => true,但這並沒有幫助。

知道爲什麼同步不工作?

+0

驗證失敗嗎?從控制檯,嘗試'post = Post.create(:name =>「kuku1」)'和'post.errors.full_messages'來查看是否以及哪些驗證失敗。 – Chirantan 2011-04-06 11:58:46

+0

我沒有在模型中的任何驗證,而且我試圖關閉它們:validate => false。沒有幫助:( – MikeMarsian 2011-04-06 12:10:27

回答

3

這現在是不可能的新記錄。從ar-extensions 0.9.3開始,當同步新記錄時,這不起作用,因爲同步期望您正在同步的記錄已經存在。它使用封面下的主鍵來確定要載入的內容(但是新記錄的主鍵爲零)。這個限制*也存在於activerecord-import 0.2.5中。如果你可以在其他條件下同步,我會很高興發佈一個允許傳遞條件的新gem。對於Rails 3.x,你需要使用activerecord-import(它取代了ar-extensions)。請在github上創建票據/問題:https://github.com/zdennis/activerecord-import/issues

對於Rails 2.x,您仍然希望使用ar-extensions,並且我可能會將activerecord-import更新回溯並推出新的gem。如果您想在這裏喜歡這個功能,請在GitHub上創建票證/問題:https://github.com/zdennis/ar-extensions/

補丁亦歡迎。

* 這裏的限制是數據庫約束,因爲它不可能在單次插入/導入之後獲得所有新創建記錄的ID,而不會執行像表鎖定之類的奇怪事情,我認爲這不是一個好的解決方案這個問題。如果任何人有想法,我全部耳朵。

UPDATE

ActiveRecord的進口0.2.6和AR-擴展0.9.4已經發布並且包括用於指定要同步上的字段支持。這些字段應該是唯一的。請參閱http://www.continuousthinking.com/2011/4/6/activerecord-import-0-2-6-and-ar-extensions-0-9-4

+0

扎克感謝名單爲詳細的答覆。我的確可以在其他條件同步(對我來說,這是「post_guid」字段)。 我在函數內部_synchronize_接受關鍵參數的代碼所看到的,所以似乎做的唯一一件事就是在關鍵領域的添加姓名到:同步參數 我使用Rails 2.3.8,所以如果你能反向移植此功能,這將是巨大的:) – MikeMarsian 2011-04-06 15:04:40

+0

邁克,我已經發布了寶石,並用信息更新了答案。 – 2011-04-06 18:59:02

+1

你的支持程度令人難以置信,我相當無語:) – MikeMarsian 2011-04-07 16:39:28