我正在学习Rails,今晚我遇到了一个有趣的问题。
我正在创建一个需要外键索引的迁移:
每当我运行'bundle exec rake db:migrate'时,我都会收到此控制台错误:
在 创建引用之前,它似乎正在尝试创建索引 。
我相信这是因为当我将“主题”引用更改为符号时:
迁移然后突然按预期工作!
这可能只是因为我是一个全新的事实,但是Ruby实际上处理的符号比字符串更快?
好奇 - 谢谢!
答案 0 :(得分:2)
这不是“更快”的问题,也不是速度问题。迁移按顺序一次执行一行。您之前指定的方式根本没有正确创建列,因此当它到达您创建索引的行时,名称不匹配。
我的猜测是,使用字符串版本时,它创建的列名称与拼写完全相同,“subject”与使用符号时的subject_id
相对。无论哪种方式,在创建列和构建索引之间肯定存在名称不匹配。
在迁移过程中始终使用符号,您应该没问题。在迁移之后,请务必检查您的schema.rb
文件,或使用GUI工具浏览数据库,以确保按照您期望的方式创建列,并使用您认为的数据类型,并且您应该做得很好。