Ruby on rails Rails:和#x27;参考文献:foo';和';整数:foo#u id';?

Ruby on rails Rails:和#x27;参考文献:foo';和';整数:foo#u id';?,ruby-on-rails,activerecord,migration,Ruby On Rails,Activerecord,Migration,在迁移中使用references:foo时,生成的列称为foo\u id。执行references:foo和只执行integer:foo\u id之间实际上有什么区别吗?可能是在后台发生了一些事情,以便在数据库级别强制执行关系?对于您的特定情况,结果是相同的;你说得对。但是references允许使用:多态=>true选项,该选项将自动将foo_type列创建为表中的字符串 从语义上讲,references最好是让迁移更好地反映数据库中表之间的关系。@Mike的回答很好地解释了reference

在迁移中使用
references:foo
时,生成的列称为
foo\u id
。执行
references:foo
和只执行
integer:foo\u id
之间实际上有什么区别吗?可能是在后台发生了一些事情,以便在数据库级别强制执行关系?

对于您的特定情况,结果是相同的;你说得对。但是
references
允许使用
:多态=>true
选项,该选项将自动将
foo_type
列创建为表中的字符串


从语义上讲,
references
最好是让迁移更好地反映数据库中表之间的关系。

@Mike的回答很好地解释了
references
的含义。但是,最好不要将迁移与AR关联结合得太紧密。特别是,如果您在从版本控制更新应用程序之前运行迁移,那么在部署应用程序时,您可能会遇到各种麻烦。除非它咬到你,否则这没什么大不了的:-)

那么你是说推荐信是危险的吗?你能举一个例子说明这可能会让我陷入什么样的困境吗?通常,如果迁移和模型代码更新不在同一版本控制提交中,或者如果你以后改变了对关联的看法,需要更新一台远远落后于开发曲线的机器,这可能会导致问题。因此,migration1使用
引用
,从而根据AR模型关联确定外键名称。稍后,您决定使用新的迁移撤消该迁移,并从代码中删除关联。现在,任何模式已经存在两代的机器都不能运行迁移,因为关联已经消失了。我知道这有点复杂。我不应该担心,直到它真的伤害了你:-)