こんにちは、私は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を追加する必要がありますか、それとも、足場を作成するときにこれを達成する方法はありますか?
Scaffoldは実際に関係を生成する方法を提供します。:references
データ型を使用する必要があります
Rails g scaffold Comment body:string author:string post:references
これにより、post_idフィールドとそのインデックスを持つコメントテーブルの移行が生成されます。ジェネレータは、コメントモデルにbelongs_to :post
も追加します。
ただし、リレーションシップの反対側は生成されないため、追加する必要があります
has_many :comments
ポストモデルに自分で。ジェネレーターがこれを処理できないため、これが必要な場合は、ネストされたリソースルーティングを追加する必要もあります。
あなたは間違いなく正しい軌道に乗っています。 Comment
足場の生成時にpost_id
列を追加すると、関係は機能します(ただし、has_many :comments
とbelongs_to :post
を追加する必要があります)
したがって、更新されたジェネレーター呼び出しは次のようになります。
Rails g scaffold Comment body:string author:string post_id:integer
次のようにbelongs_to
を使用することもできます。
Rails g scaffold Comment body:string author:string post:belongs_to