0

結合テーブルの article_categories を作成する方法を知りたいのですが、記事ごとに 1 つのカテゴリしか存在できません。カテゴリを行う一般的な方法は、has_and_belongs_to_many を使用して各記事に複数のカテゴリを許可することですが、記事ごとに 1 つのカテゴリのみを許可したいと思います。has_and_belongs_to_many 関連付けを使用して、articles_categories 結合テーブルを既にセットアップしています。私は Apress Beginning Rails 3 の例に従いました。この例では、articles_categories テーブルを :id => false に設定することも推奨されています。IDを持つようにテーブルを更新する必要がありますか? ありがとう!

これまでのところ、記事モデルを has_one :category に更新し、カテゴリ モデルを has_many :articles に更新しましたが、irb でテスト中にエラーが発生しました。

a = Article.first
a.category

エラーは次のとおりです。

Category Load (0.7ms)  SELECT "categories".* FROM "categories" WHERE "categories"."article_id" = 1500 LIMIT 1
PG::Error: ERROR:  column categories.article_id does not exist
LINE 1: SELECT  "categories".* FROM "categories"  WHERE "categories"...

誰かがこれをより適切に設定する方法を教えてもらえますか? ありがとう!

4

2 に答える 2

4

Articleモデルには の代わりbelongs_to :categoryに関連付けが必要ですhas_one :categorycategory_idまた、テーブルに列を追加することを忘れないでくださいarticles(まだ移行を追加していない場合は、そのための移行を追加できます)。

于 2012-04-09T00:55:51.303 に答える
3

各記事にカテゴリを1つだけ含める場合は、クロステーブルを使用しないでください。移行で参照を使用するだけです— http://guides.rubyonrails.org/migrations.html#highlighter_472212

rails g migration ArticleHasCategory category:references

次に、記事にモデルのカテゴリがあることを指定します

belongs_to :category

電話をかけるときarticle.category<relation name>_id記録する列を自動的に検索します<relation name>

于 2012-04-09T00:59:42.557 に答える