2015-06-09 192 views
0

我有一個奇怪的問題。這是我的移民代碼:Rails遷移不起作用

class SetDefaultToFalse < ActiveRecord::Migration 
    def change 
    MyObject.where('done is ?', nil).each do |a| 
     a.done = false 
     a.save 
    end 
    end 
end 

如果我的數據庫轉儲運行此從前段時間,與所有其他,舊的遷移,它的完成後,任何my_objects不具備done場標記爲false。如果我再次使用rake db:rollbackdb:migrate,突然它可以工作。爲什麼?在此之前,列done增加了5次以上的遷移。更改以前的遷移不是我正在尋找的解決方案。

+1

你應該看看這個:HTTP://計算器.com/questions/12612969/setting-different-default-values-in-rails-migrations – TarunJadhwani

+1

@TarunJadhwani,你可以發表你的評論作爲答案。解決方案是這兩行: MyObject.connection.schema_cache.clear! MyObject.reset_column_information –

回答

1

我不知道爲什麼要這麼做,在遷移,但是這可能幫助:

MyObject.where('done is ?', nil).update_all(done: false) 
+0

示例中的代碼被簡化爲僅以簡單的方式顯示問題。在那裏展示的操作應該通過創建一個字段並將'默認'選項設置爲false來完成。 –

0

我建議你試試這個代碼:

class SetDefaultToFalse < ActiveRecord::Migration 
    def self.up 
    MyObject.where('done is ?', nil).each do |a| 
     a.update_attribute(done: false) 
    end 
    end 
end 
0

後添加做過場創建。在數據庫架構'完成'字段不存在。

運行

耙分貝:遷移