web-dev-qa-db-ja.com

足場を作るときに関係を作る

こんにちは、私はRuby on Railsを初めて使用しています。小さなブログサイトを作成しようとしています。投稿とコメントの2つのテーブルがあります。各投稿には多数のコメントがあります。これらのコマンドを使用してテーブルを生成します。

Rails g scaffold Post title:string body:text author:string
Rails g scaffold Comment body:string author:string

次に、モデルクラスに関係を追加します。 Postクラスにhas_many :commentsを追加し、Commentクラスにbelongs_to :postを追加します。しかし、post.commentsを呼び出そうとすると、SQLException: no such column: comments.post_idと言うランタイムエラーが発生します。マイグレーションを作成して、コメントの下にpost_idを追加する必要がありますか、それとも、足場を作成するときにこれを達成する方法はありますか?

34
Stefan Bossbaly

Scaffoldは実際に関係を生成する方法を提供します。:referencesデータ型を使用する必要があります

Rails g scaffold Comment body:string author:string post:references

これにより、post_idフィールドとそのインデックスを持つコメントテーブルの移行が生成されます。ジェネレータは、コメントモデルにbelongs_to :postも追加します。

ただし、リレーションシップの反対側は生成されないため、追加する必要があります

has_many :comments

ポストモデルに自分で。ジェネレーターがこれを処理できないため、これが必要な場合は、ネストされたリソースルーティングを追加する必要もあります。

142
JamieD

あなたは間違いなく正しい軌道に乗っています。 Comment足場の生成時にpost_id列を追加すると、関係は機能します(ただし、has_many :commentsbelongs_to :postを追加する必要があります)

したがって、更新されたジェネレーター呼び出しは次のようになります。

Rails g scaffold Comment body:string author:string post_id:integer
9
agmin

次のようにbelongs_toを使用することもできます。

Rails g scaffold Comment body:string author:string post:belongs_to
0
Jeremy Lynch