2012-02-02 110 views
41

重裝列我用Rails 3.2,並有包含代碼遷移:Model.reset_column_information不在軌道遷移

add_column :users, :gift_aid, :integer, :default => 2 
# reset columns 
User.reset_column_information 

... code here to load legacy data from sqlite3 database ... 

# now create a user with the loaded column data 
user = User.create(...other cols..., 
        :gift_aid => migrated_gift_aid_column_data, 
        ...other cols...) 

和運行遷移時,我得到unknown attribute: gift_aidUser.column_names在致電reset_column_information之前和之後顯示相同的列表。

奇怪的是,當我手動將列放入mysql並重新運行遷移時,它按預期工作。從第一次遷移開始,再次使用空數據庫,並且它不起作用,因此這與運行所有遷移而不是單個遷移有關。

我有幾個以前的用戶模型遷移,都包括reset_column_information和兩個工作正常。

我真的抓我的頭就這一個 - 任何人有任何想法

回答

73

我想,這一定是某種相關的模式高速緩存錯誤的......這可能工作:

User.connection.schema_cache.clear! 
User.reset_column_information 

(for Rails 3.2.2)

+1

我想你可能是對的。我在兩次不同的遷移中實際上有兩次對'User.reset_column_information'的調用,這是第二次失敗。我通過重組我的遷移來修復它,所以我只有一次調用'reset_column_information'(因爲我還沒有最終部署該網站,所以它沒有問題返回)。這個解決方案看起來也可以工作。如果我有機會,我會測試它。 – Iain 2012-03-17 13:32:12

+1

我可以證實這個工作很好。看起來像很長的遷移和對模型的多重更改只有第一個'reset_column_information'起作用。清除模式緩存使其工作得很好!謝謝:) – Iain 2012-03-19 15:34:42

+1

非常感謝!由於Rails文檔明確寫了一些不同的東西,這導致我惡意破壞 - > http://guides.rubyonrails.org/migrations.html#using-models-in-your-migrations – hrdwdmrbl 2013-05-17 17:34:24