【问题标题】:RoR - Foreign Keys created via associations and migrate or "by hand" (or scaffold)?RoR - 通过关联创建的外键并迁移或“手动”(或脚手架)?
【发布时间】:2011-04-13 13:37:34
【问题描述】:

刚开始学习 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

所以总而言之,在创建博客应用程序时,我必须在帖子模型中指定 user_id 字段,还是在我迁移时用户模型的has_many :posts 负责实际将其添加到数据库(我的是 mysql)?

如果答案是我应该在我首先创建模型时(通过脚手架或手动)执行它们,那么当我稍后决定要添加外键时会发生什么,我必须添加作为新迁移中的execute 语句?

【问题讨论】:

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


    【解决方案1】:

    你是对的。您需要在创建脚手架/模型/迁移时指定外键,以使数据库正确,并且 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 或您需要的任何关联来更新您的模型。

    【讨论】:

    • 谢谢。我以为是这样。只是想确保我没有遗漏什么。
    • +1 包括在创建初始脚手架后如何进行后续生成。在意识到这个简单但至关重要的区别之前,我必须通读一半的“Agile Web Dev with Rails”一书。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 2018-06-19
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    相关资源
    最近更新 更多