2015-08-24 63 views
0

我正在進行遷移,其中來自要刪除的列的某些數據需要轉換爲其他表單。不能保證所有數據在遷移時都可用,所以我需要在種子期間轉換數據。字符串到對象參考

我節省使用

Object.find_each do |object| 
    file_out.puts(object) 
    file_out.puts(object.attribute) 

然而,閱讀本對象引用回來後,當對象和數據,使用

object = file_in.gets 

我得到的錯誤

undefined method 'update_attributes' for `#<Object:0xe1b6f44>:String` 

如何將該字符串轉換回實際的對象參考。由於數據庫使用模式,因此不保證數據庫列是唯一的。

回答

1

你沒有;你會序列化這個對象,而不只是傾倒出它的to_s字符串表示。

當你讀回來,你會反序列化它。

這就是說,似乎一次完成每個「事物」會更容易,而不是依賴於這樣的事情,因爲序列化它也會序列化其ID,並且如果它不再以該ID存在(假設它是一個DB對象),除非你明確地處理它,否則你會被洗掉。

+0

不幸的是,我無法一次完成所有的「事情」,因爲有些信息實際上來自後來的遷移(我知道它很痛苦,但我無法繞過它)。由於這是在遷移和直接種子期間發生的事情,該對象仍然存在,我剛剛閱讀了有關序列化的相同ID – user3027875

+0

,但似乎會失敗。每個模式中的默認對象可以具有相同的所有50個字段。 – user3027875

+0

@ user3027875:序列化是一種將對象展平爲可以存儲(例如在磁盤上)或傳輸(通過網絡連接例如),ActiveRecord'serialize'方法通常與序列化沒有多大關係。您需要將對象序列化爲JSON,YAML或其他格式,而不是使用AR的'serialize'。 –