【问题标题】:ActiveRecord::UnknownAttributeError: unknown attribute 'article_id' for TaggingActiveRecord::UnknownAttributeError:用于标记的未知属性“article_id”
【发布时间】:2015-12-21 18:29:01
【问题描述】:

我正在开发第 I3 部分的 Blogger Rails 应用程序:

http://tutorials.jumpstartlab.com/projects/blogger.html#blogger-2

我在运行控制台并尝试运行时遇到错误:

a.tags.create name: "tag1"

我跑完之后:

a = Article.first

tagging.rb 文件:

class Tagging < ActiveRecord::Base
  belongs_to :tag
  belongs_to :articles
end

article.rb 文件:

class Article < ActiveRecord::Base
  has_many :comments
  has_many :taggings
  has_many :tags, through: :taggings
end

tag.rb 文件:

class Tag < ActiveRecord::Base
  has_many :taggings
  has_many :articles, through: :taggings
end

我尝试将has_many :article_id 添加到标记类中,将db:migration 倾斜并再次运行它,但它返回了一个没有方法的nill 类错误。

我应该在哪里定义article_id?是否需要进入CreateTagging的迁移文件?

【问题讨论】:

    标签: ruby-on-rails-4 activerecord attributeerror


    【解决方案1】:

    tagging.rb 文件是您的连接文件,您在其中定义了 article_idtag_id

    我注意到您有belongs_to :articles ...您应该使用单数...belongs_to :article。这可能就是你失败的原因。前提是你...

    generate model Tagging tag:references article:references
    

    ...正如教程所建议的那样,它会自动在 taggings 表中为您创建两个 id 字段。

    您可以通过检查db/schema.rb来确认

    【讨论】:

    • 我按照您的建议检查了架构文件:
    • 我按照您的建议检查了 schema.rb 文件。标记确实多次引用了articles_id,据我了解,它是articles_id 生成的,因为标记或标记可以属于多篇文章。我的班级 CreateTaggings
    • 每个tagging只能属于一个tag和一个article ... tagging是连接特定标签到特定文章的连接记录。标签可以有很多标签,文章也可以有很多标签,但是每个标签只属于一个标签,并且只属于一篇文章。列名应为article_idtag_id
    • 谢谢。我能够为迁移回滚表。它现在正在工作。
    • 太好了,我很高兴它已排序!如果有帮助,请随时接受我的回答。答案左侧有一个选项可以做到这一点。干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2013-04-09
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多