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

k00*_*00k 3 migration foreign-keys scaffolding associations ruby-on-rails-3

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

但我想确保我完全理解.

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

所以我想我必须这样做:

rails generate scaffold post body:text title:string user_id:integer
Run Code Online (Sandbox Code Playgroud)

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

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

dwh*_*ite 5

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

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

rails generate scaffold post body:text title:string user_id:integer
Run Code Online (Sandbox Code Playgroud)

如你所说,并has_many为模型本身添加.

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

rails generate migration add_user_id_to_posts user_id:integer
Run Code Online (Sandbox Code Playgroud)

有了它,您可以运行一个rake db:migrate,然后使用has_many您需要的任何关联更新您的模型.