rails如何知道外键是什么属性?

时间:2014-09-07 19:10:54

标签: ruby-on-rails

我跑了

    rails generate scaffold post title:string body:text
    rails generate scaffold comment post_id:integer body:text
    rake db:migrate
    rake routes

然后,在post.rb模型中,我做了

    class Post < ActiveRecord::Base
    has_many :comments, dependent: :destroy
    end

然后,在comment.rb模型中,我做了

    class Comment < ActiveRecord::Base
    belongs_to :post
    end

协会按预期工作。然而,我无法弄清楚Rails如何知道'post_id' 是注释表中的外键?我没有指定它。请解释一下这背后的魔力。

PS:我是超级菜鸟。

1 个答案:

答案 0 :(得分:1)

实际上,您已将某些Rails约定“扩展”到迁移中。

此:

rails generate scaffold comment post_id:integer body:text

......本来可以这样:

rails generate scaffold comment post:references body:text

...所以你没有指定某些魔术属性名称,而某些恰好是一个整数,而是你正在引用的模型名称,你肯定知道。

当然,这两个人做同样的事情。这是一种惯例,但您始终可以覆盖它,如the guides (4.1.2.5)

中所述
  

按照惯例,Rails假定用于保存外来的列   此模型上的键是带有后缀_id的关联的名称   添加。 :foreign_key选项允许您设置外部名称   直接关键