【问题标题】:Rails has_many and belongs_to returns nilRails has_many 和 belongs_to 返回 nil
【发布时间】:2016-11-01 13:36:12
【问题描述】:

我有两个模型“文章”和“书签”,并使用特定列“article_doi”作为外键关联它们。

在article.rb中,

has_many :bookmarks, class_name: 'Bookmark', foreign_key: "article_doi", dependent: :destroy

在书签.rb 中,

 belongs_to :article, class_name: 'Article', foreign_key: "article_doi"

但是当我做 article_object.bookmarks 时,它返回一个 nil 此外,当我执行 bookmark_object.article 时,它​​返回 nil。

出了什么问题?

【问题讨论】:

  • 你没有在 db 中创建关联,很可能 - 这意味着还没有关联的对象
  • 没有。在书签表中,我有一个带有 article_doi 列的书签对象,其值为“abc”,它是文章对象的“doi”

标签: ruby-on-rails ruby activerecord associations


【解决方案1】:

正如@AndreyDeineko 所说,有几个步骤可以让 has_many/belongs_to 关联起作用:

  1. has_many/belongs_to 声明添加到您的模型中(看起来您已经这样做了)。
  2. 创建并运行database migration 以将article_doi 列添加到数据库中的bookmarks 表中(具有belongs_to 的模型是包含引用的表)。
  3. 重新启动您的 Rails 服务器或控制台,以便它注意到新列。

最后,你实际上需要在链接的数据库中保存一些记录!

a = Article.first
b = a.bookmarks.build
b.save!
a.reload.bookmarks.count # => 1

【讨论】:

  • article_doi 列到两个表?我在文章表中有“doi”列。和书签表中的 article_doi 列。
  • 你是对的——只有书签表需要article_doi 列。编辑了我的答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 2011-09-11
相关资源
最近更新 更多