您好我是Ruby on Rails的新手。我正在尝试创建一个小型博客网站。我有两张桌子帖子和评论。每篇博文都会有很多评论。我使用这些命令生成表。
rails g scaffold Post title:string body:text author:string
rails g scaffold Comment body:string author:string
现在我想将关系添加到模型类中。我将has_many :comments
添加到Post类,将belongs_to :title
添加到Comment类。但是,当我尝试调用post.comments
时,我收到运行时错误SQLException: no such column: comments.post_id
。我应该创建一个迁移并在Comment下添加post_id,还是有办法在scaffolding中实现这个目的?
答案 0 :(得分:134)
Scaffold实际上提供了一种生成关系的方法,您应该使用:references
数据类型
rails g scaffold Comment body:string author:string post:references
这将为comments表生成一个迁移,其中包含post_id字段和索引。生成器还会将belongs_to :post
添加到Comment模型中。
然而,它不会产生关系的反面,因此您需要添加
has_many :comments
自己去Post模型。如果这是您需要的,则还需要添加嵌套资源路由,因为生成器无法处理此问题。
答案 1 :(得分:9)
你肯定是在正确的轨道上。如果您在生成post_id
脚手架时添加Comment
列,那么您的关系将有效(尽管您仍需要添加has_many :comments
和belongs_to :post
)
因此更新的生成器调用将如下所示:
rails g scaffold Comment body:string author:string post_id:integer
答案 2 :(得分:0)
您也可以像这样使用belongs_to
:
rails g scaffold Comment body:string author:string post:belongs_to