Rails:’references:foo’和’integer:foo_id’之间有区别吗?

当我在迁移中使用references :foo时,生成的列称为foo_id 。 做references :foo之间是否有任何区别references :foo和只做integer :foo_id ? 也许在幕后发生了一些事情来强制执行数据库级别的关系?

结果与您的具体情况相同; 你是对的。 但是references允许a :polymorphic => true选项,它将自动在表中创建foo_type列作为字符串。

从语义上讲,如果您尝试使迁移更好地反映数据库中表之间的关系,则references会更好。

@ Mike的答案很好地解释了references的含义。 但是,通常最好不要将迁移过度与AR关联过度联系起来。 特别是,如果在从版本控制更新应用程序之前运行迁移,则在部署应用程序时可以使用各种pickle。 这不是什么大不了直到它咬你:-)