脚手架时创建关系

Ste*_*aly 33 ruby ruby-on-rails scaffolding

嗨,我是Ruby on Rails的新手.我正在尝试创建一个小型博客网站.我有两张桌子帖子和评论.每篇博文都会有很多评论.我使用这些命令生成表.

rails g scaffold Post title:string body:text author:string
rails g scaffold Comment body:string author:string
Run Code Online (Sandbox Code Playgroud)

现在我想将关系添加到模型类中.我添加has_many :comments到Post类和belongs_to :postComment类.但是,当我尝试调用时,post.comments我得到一个运行时错误说SQLException: no such column: comments.post_id.我应该创建一个迁移并在Comment下添加post_id,还是有办法在脚手架中实现这个目的?

Jam*_*ieD 140

Scaffold实际上提供了一种生成关系的方法,您应该使用:references数据类型

rails g scaffold Comment body:string author:string post:references
Run Code Online (Sandbox Code Playgroud)

这将为comments表生成一个迁移,其中包含post_id字段和索引.生成器也将添加belongs_to :post到Comment模型中.

然而,它不会产生关系的反面,因此您需要添加

has_many :comments
Run Code Online (Sandbox Code Playgroud)

自己去邮政模特.如果这是您需要的东西,您还需要添加嵌套资源路由,因为生成器无法处理此问题.

  • @lapinkoira在上面的例子中,搭建Comments模型时包含的`post:references`位将在引用它所属的Post的Comment上添加一个外键.需要将`has_many:comments`关系添加到Post模型,但不需要额外的迁移. (3认同)

agm*_*min 9

你肯定是在正确的轨道上.如果post_id在生成Comment脚手架时添加列,则您的关系将起作用(尽管您仍需要添加has_many :commentsbelongs_to :post)

所以更新的生成器调用看起来像这样:

rails g scaffold Comment body:string author:string post_id:integer
Run Code Online (Sandbox Code Playgroud)