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。 这不是什么大不了直到它咬你:-)