2009-06-09 96 views
1

我試圖在現有數據庫上運行遷移來更改表中的列名。當我運行遷移時,出現一個錯誤,指出Blob/Text字段不能有默認值。有問題的列是文本列,具有非空屬性,但沒有默認值。Rails rename_column遷移問題

Rails所嘗試的遷移:

ALTER TABLE xxxxx CHANGE abcdABCD文本DEFAULT '' NOT NULL

現在,我還沒有問遷移更改列類型,我只問它重命名列,那麼爲什麼遷移嘗試對列類型做任何事情?

我已經Google了這個問題,並沒有拿出解釋或解決方法。

任何幫助表示讚賞。

維克拉姆

回答

0

有似乎是在這個問題上的長期未解決的票,如下所述:

rails bug report

Rails的默認行爲是使它們是NULL列,因爲這可以防止將空白字符串翻譯回Ruby時,對存在檢查等有誤報。你可以通過重新定義你的文本列來在mySQL控制檯中使用NULL值來解決這個問題嗎?

編輯

您可以在遷移文件做到這一點,它不是Rails的方式,但它比發送電子郵件給大家改變自己的本地副本更好了很多:

MyModel.connection.execute "ALTER TABLE xxxxx CHANGE abcd ABCD text DEFAULT NULL" 
+0

Arrghh的疼痛! 我試圖做的正確的事情不走出Rails遷移和正確記錄一切,以便其他人可以關注,並可以運行rake db:migrate。這在Rails的外部增加了一個額外的步驟。 感謝您指出錯誤報告。我不知道爲什麼我沒有找到它。 – 2009-06-09 05:45:43