2012-06-02 48 views
0

我重命名一個列(「OLD_NAME」改爲「NEW_NAME」),並從整數轉換其他列(「列2」)在Rails遷移到布爾:導軌 - reset_column_information不起作用

def up 
    rename_column :my_models, :old_name, :new_name unless column_exists?(:my_models, :new_name) 
    ........... 
    if column_exists?(:my_models, :column2) && !column_exists?(:my_models, :column2_num) && MyModel.columns_hash['column2'].type==:integer 
    rename_column :my_models, :column2, :column2_num 
    add_column :my_models, :column2, :boolean, :null => false, :default => true 

    MyModel.reset_column_information 

    MyModel.all.each do |item| 
     item.column2 = (item.column2_num!=0) 
     item.save! 
    end 
    remove_column :my_models, :column2_num 
    end 
    ........... 
end 

耙分貝:將結果遷移到:

undefined method `old_name' for #<MyModel:0x4ff4238> 

「save!」中出現錯誤方法。

我也試過:

MyModel.connection.schema_cache.clear! 
MyModel.reset_column_information 

id不工作過。

值得一提的是,我已經應用了此遷移的先前版本,並且在回滾(「down」方法爲空)之後嘗試再次應用此遷移。因此,數據庫模式當前不包含「old_name」,因爲它沒有在物理上恢復。

回答

1

我最近有同樣的問題,我發現它不是導致問題的Rails,而是數據庫中仍然引用舊列名稱的更新觸發器。

刪除觸發器的那部分,並且遷移已經完成。