RoR - 通过关联和迁移或“手工”(或脚手架)创建的外键?

时间:2011-04-13 13:37:35

标签: ruby-on-rails-3 migration foreign-keys associations scaffolding

刚开始学习Ruby on Rails。我正在使用RoR 3.我读过这个:http://guides.rubyonrails.org/association_basics.html

但我想确保完全理解。

在创建新模型时(我现在正在通过脚手架做),我应该在那时指定foreign_key字段,还是该关联完全处理?我认为关联只是在app级别,而不是在db级别,对吗?

所以我认为我必须这样做:

rails generate scaffold post body:text title:string user_id:integer

总而言之,在创建博客应用程序时,我必须在post模型中指定user_id字段,或者用户模型的has_many :posts是否真正将其添加到db(我的是mysql)时迁移?

如果答案是我在第一时间(通过脚手架或手工)创建模型时应该这样做,当我稍后决定要添加外键时会发生什么,我必须添加作为新迁移中的execute语句?

1 个答案:

答案 0 :(得分:5)

你是对的。您需要在创建脚手架/模型/迁移时指定外键,如您所述,以使数据库正确,并且has_many会为您处理模型。

因此,对于脚手架(或模型)的初始生成,只需执行:

rails generate scaffold post body:text title:string user_id:integer

如您所述,并为模型本身添加has_many

对于以后的添加,您将组成一个新的迁移,例如(假设您想使用生成,但您可以编写自己的迁移):

rails generate migration add_user_id_to_posts user_id:integer

然后,您可以运行rake db:migrate,然后使用has_many或您需要的任何关联来更新模型。