39

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

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

次に、関係をモデル クラスに追加します。has_many :commentsPost クラスとbelongs_to :postComment クラスに追加します。ただし、呼び出そうとするとpost.comments、実行時エラーが発生しますSQLException: no such column: comments.post_id。移行を作成してコメントの下に post_id を追加する必要がありますか、またはスキャフォールディング時にこれを達成する方法はありますか?

4

3 に答える 3

152

Scaffold は実際にリレーションシップを生成する方法を提供します。:referencesデータ型を使用する必要があります

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

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

ただし、関係の反対側は生成されないため、追加する必要があります

has_many :comments

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

于 2014-10-03T10:07:21.320 に答える
2

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

rails g scaffold Comment body:string author:string post:belongs_to
于 2018-12-19T06:32:59.827 に答える