Rails 3 - внешние ключи - строки против символов - PullRequest
1 голос
/ 18 октября 2011

Я нахожусь в процессе изучения Rails и столкнулся с интересной проблемой сегодня вечером.

Я создавал миграцию, которая потребовала бы индекс для внешнего ключа: Migration with Symbol

Всякий раз, когда я запускаю 'bundle exec rake db: migrate', я получаю эту консольную ошибку: Migration Error

Похоже, что он пытался создать индекс до это создавало ссылку.

Причина, по которой я считаю это, заключается в том, что, когда я изменяю ссылку на тему на символ:

Migration with symbol instead of string

Миграция тогда внезапно работает, как и ожидалось!enter image description here

Это может быть просто тот факт, что я новичок, но действительно ли символы обрабатываются Ruby быстрее, чем строки?

Просто любопытно - спасибо!

1 Ответ

2 голосов
/ 18 октября 2011

Это не «более быстрая» проблема или проблема скорости. Миграции выполняются по одной строке за раз, по порядку. То, как вы указали его ранее, просто не создало столбец правильно, поэтому, когда он добрался до строки, где вы создаете индекс, имена не совпадают.

Я предполагаю, что при строковой версии он создал имя столбца в точности так, как вы его написали, "субъект", а не subject_id при использовании символа. В любом случае, у вас определенно было несоответствие имени между моментом создания столбца и моментом создания индекса.

Всегда используйте символы для этого в ваших миграциях, и вы должны быть в порядке. Всегда проверяйте свой файл schema.rb или просматривайте базу данных с помощью инструмента с графическим интерфейсом после миграции, чтобы убедиться, что столбцы созданы так, как вы ожидаете, и с типами данных, которые, как вы думаете, у вас есть, и вам должно быть хорошо. *

...