0

我想知道如何建立一个连接表articles_categories,但是每篇文章只能有一个类别。我知道进行分类的典型方法是使用 has_and_belongs_to_many 为每篇文章允许多个分类,但我希望每篇文章只允许一个分类。我已经使用 has_and_belongs_to_many 关联设置了我的articles_categories 连接表。我遵循了 Apress Starting 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 :category. 也不要忘记在表中添加一category_idarticles(如果您还没有添加迁移,您可以添加)。

于 2012-04-09T00:55:51.303 回答
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>

于 2012-04-09T00:59:42.557 回答