2012-04-09 37 views
0

我想知道如何建立一個連接表articles_categories,但其中每個文章只能有一個類別的地方。我知道執行類別的典型方法是使用has_and_belongs_to_many爲每篇文章提供多個類別,但是我只想爲每篇文章分配一個類別。我已經使用has_and_belongs_to_many關聯設置了我的articles_categories連接表。我遵循Apress Beginning Rails 3中的一個示例,該示例還建議設置articles_categories表:id => false。我是否也必須更新表格才能擁有ID?謝謝!Rails 3連接表article_categories只允許一個類別

到目前爲止,我已經更新了我的文章模型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

如果你想每篇文章只有一個類別,你不應該使用交叉表。只需在遷移使用引用 - http://guides.rubyonrails.org/migrations.html#highlighter_472212

rails g migration ArticleHasCategory category:references 

然後你註明文章在模型

belongs_to :category 

類別當你調用article.category。它會自動尋找列<relation name>_id哪些應該指向記錄在<relation name>

4

Article模型應該有一個belongs_to :category關聯而不是has_one :category。另外,不要忘記添加一個category_idarticles表(您可以添加一個遷移如果你還沒有)。