我跑了
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:我是超级菜鸟。答案 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
选项允许您设置外部名称 直接关键