Rails belongs_to association returns" Undefined Method"错误

时间:2014-11-07 16:34:08

标签: ruby-on-rails associations

我有一个属于某个部分的文章模型。我无法使这种连接正常工作,而且我收到了#34; Undefined Method"在rails控制台中尝试Section.article或Article.section时出错。

如何将这些模型组合在一起以打印特定部分的所有文章并验证其连接?

我已经从答案和帖子中实施了许多解决方案,可能会让事情变得混乱。

感谢您的帮助!

模型(我还有带有forgeign_key或参考条目的版本):

class Article < ActiveRecord::Base
    belongs_to :section
end

class Section < ActiveRecord::Base
    has_many :articles
end

迁移到更新表:

class AddSectionRefToArticles < ActiveRecord::Migration
  def change
    add_reference :articles, :section, index: true
  end
end

Schema.rb

ActiveRecord::Schema.define(version: 20141107123935) do

  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"

  create_table "articles", force: true do |t|
    t.string   "title"
    t.string   "body"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "section_id"
  end

  add_index "articles", ["section_id"], name: "index_articles_on_section_id", using: :btree

  create_table "sections", force: true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

end

2 个答案:

答案 0 :(得分:1)

您尝试使用类方法(Section.articleArticle.section),而关联被定义为实例方法。因此,要调用关联,您必须在对象上调用它,例如:Section.first.articlesArticle.last.section

答案 1 :(得分:1)

你在命令行上实际运行的是什么? Section.articleArticle.section无效。

您需要在实例上运行关系方法,而不是类本身。

section = Section.create(name: 'Section 1')
section.articles << Article.new(title: 'My article')

section.articles # returns an array of articles belonging to the Section 1 object
Article.last.section # returns the Section 1 object