2012-04-09 12 views
0

私は結合テーブルarticles_categoriesを構築する方法を知っていますが、アーティクルごとに1つのカテゴリしか存在できません。カテゴリを行う典型的な方法は、has_and_belongs_to_manyを使って各記事の複数のカテゴリを許可することですが、記事ごとに1つのカテゴリのみを許可したいと思います。私はすでにhas_and_belongs_to_many関連でarticles_categories joinテーブルを設定しています。私はApress Beginning Rails 3の例に続き、articles_categoriesテーブルを設定することもお勧めします。id => false。 IDを持つようにテーブルを更新する必要がありますか?ありがとう!Rails 3 join table article_categoriesは1つのカテゴリのみを許可します

これまでのところ、私はhas_oneのに私の記事のモデルを更新しました:has_manyのにカテゴリおよびカテゴリモデル:記事が、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"... 

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

答えて

3

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

rails g migration ArticleHasCategory category:references 

次にあなたが記事を指定するあなたはarticle.categoryを呼び出すとモデル

belongs_to :category 

でカテゴリがあります。自動的に列<relation name>_idを検索し、記録することを指定します。<relation name>

4

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

関連する問題