2015-07-20 62 views
1

我已經成立了一個新的遷移文件:Rails的遷移文件失敗 - Mysql2 ::錯誤:數據截斷

class ChangeCourseDefaults < ActiveRecord::Migration 
    def self.up 
    change_column_null :course_objects, :active, false 
    change_column_default :course_objects, :active, 0 
    end 
end 

我運行它這樣我的Debian服務器上(鋼軌4.2.1紅寶石2.1 )

sudo bundle exec rake db:migrate:up VERSION=20150720095700 RAILS_ENV=test 

然後我得到這個錯誤:

Mysql2::Error: Data truncated for column 'active' at row 1: ALTER TABLE `course_objects` CHANGE `active` `active` tinyint(1) NOT NULL/var/www/html/test/xyz/vendor/bundle/ruby/2.1.0/gems/activerecord-4..2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:299:in `query' 

請告訴我這個問題?

+0

沒有任何記錄之前這已經是空?請檢查 – Athar

+0

是的,有數字 – Felix

+0

是的,這就是爲什麼當這行'change_column_null:course_objects,:active,false'運行時,它將檢查所有值並確認不應該有任何空值。並在這裏崩潰。但我想下面粘貼的答案將解決您的問題。 – Athar

回答

5

您可以使用change_column_null

class ChangeCourseDefaults < ActiveRecord::Migration 
    def change 
    change_column_null :table_name, :column_name, false, 0 # set default as 0 
    end 
end 
+0

我得到這個錯誤: 未定義的方法'null'爲# /var/www/html/test/xyz/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.1/lib /active_record/migration.rb:661:在'method_missing'中的塊' – Felix

+2

用false替換null。 – Athar

+0

@Felix:我已經更新了我的回答 –

2
class ChangeCourseDefaults < ActiveRecord::Migration 
    def change 
    change_column_null :course_objects, :active, false, 0 
    end 
end 

參考:change_column_null for existing column

+0

我剛剛添加了答案,因爲上面的問題很少。一旦它正確,請接受上面的答案Felix。他有更多的權利。:) – Athar

+0

感謝您的評論。 1+ –

+0

我的榮幸@ GaganGami.thanks。:) – Athar