【问题标题】:Rails 3 join table article_categories only allow one categoryRails 3 join table article_categories 只允许一个类别
【发布时间】:2012-04-09 00:49:56
【问题描述】:

我想知道如何建立一个连接表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"...

谁能告诉我如何更好地设置它?谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    Article 模型应该有一个belongs_to :category 关联而不是has_one :category。另外不要忘记将category_id 列添加到articles 表(如果您还没有添加迁移,您可以添加)。

    【讨论】:

      【解决方案2】:

      如果您希望每篇文章只有一个类别,则不应使用交叉表。只需在迁移中使用引用 — http://guides.rubyonrails.org/migrations.html#highlighter_472212

      rails g migration ArticleHasCategory category:references
      

      然后你指定文章在模型中有类别

      belongs_to :category
      

      当您致电article.category 时。它将自动查找列<relation name>_id,该列应指向<relation name>中的记录

      【讨论】:

        猜你喜欢
        • 2022-10-14
        • 1970-01-01
        • 2021-09-18
        • 2013-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多