模型错误中的Rails关联

时间:2015-02-24 17:33:38

标签: ruby-on-rails ruby activerecord

我正在使用rails 4.2.0。我收到了这个错误:

ActiveRecord::HasManyThroughAssociationNotFoundError: 
Could not find the association :taggings in model Article

以下是我的模特:

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

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

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

标记是Article和Tag之间多对多关系的中间模型。

如果有帮助,我的架构:

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

  create_table "articles", force: :cascade do |t|
    t.string   "title"
    t.text     "body"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "comments", force: :cascade do |t|
    t.string   "author_name"
    t.text     "body"
    t.integer  "article_id"
    t.datetime "created_at",  null: false
    t.datetime "updated_at",  null: false
  end

  add_index "comments", ["article_id"], name: "index_comments_on_article_id"

  create_table "taggings", force: :cascade do |t|
    t.integer  "tag_id"
    t.integer  "article_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  add_index "taggings", ["article_id"], name: "index_taggings_on_article_id"
  add_index "taggings", ["tag_id"], name: "index_taggings_on_tag_id"

  create_table "tags", force: :cascade do |t|
    t.string   "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

end

我在rails控制台中运行此代码来测试我的关联:

a = Article.first
a.tags.create name: "cool"

我得到了上述错误。

我见过类似的问题,回答“如果你通过:: x,你必须先拥有has_many:x,”但我不认为这是我的问题。

1 个答案:

答案 0 :(得分:0)

这可能是一个愚蠢的问题,但您是否尝试创建独立于文章模型的标记?如果你还没有,那么可能是因为没有标记模型的数据库搞砸了。否则,协会看起来很好,应该工作。我能想到的另一件事是模型文件夹的文件名不正确