2012-04-09 39 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表(您可以添加一个迁移如果你还没有)。