2011-10-18 78 views
1

我正在學習Rails,我今晚遇到了一個有趣的問題。Rails 3 - 外鍵 - 字符串與符號

我創建這將需要外鍵索引遷移: Migration with Symbol

每當我會跑「捆綁高管耙分貝:遷移」,我會收到此控制檯錯誤: Migration Error

看起來好像它正在創建索引之前它正在創建參考。

的原因,我相信這是因爲當我改變「主題」參照符號:

Migration with symbol instead of string

遷移然後突然按預期工作! enter image description here

這可能只是一個事實,即我是一個總newby,但實際上由Ruby比字符串更快地處理符號?

只是好奇 - 謝謝!

回答

2

這不是一個「更快」的問題,或者是速度問題。遷移按順序一次執行一行。您之前指定的方式並未正確創建列,因此,當它到達創建索引的行時,名稱不匹配。

我的猜測是,使用字符串版本時,它創建了與拼寫完全相同的列名稱,「subject」與使用符號時的subject_id相反。無論採用哪種方式,您在創建列時以及索引建立時都會出現名稱不匹配。

在你的遷移中總是使用這個符號,你應該沒問題。請務必在遷移後檢查schema.rb文件或使用GUI工具瀏覽數據庫,以確保按照您期望的方式創建列,以及您認爲它們的數據類型,並且您應該很好。

+0

感謝您的評論。爲了看看會發生什麼,我運行了rake db:migrate VERSION = 0返回到原來的狀態(我用FF的SQLite Manager加載項檢查了它)。然後,我將遷移文件中的文本更改爲「subject_id」而不是「subject」。遷移備份後,我仍然收到相同的錯誤。從現在開始,我會堅持使用符號,但很高興知道它爲什麼不起作用。從我讀過的「subject_id」應該給我的結果如下:subject。 – PhillipKregg

+0

好問題。我一直使用符號,所以我不確定。 – jefflunt