我正在使用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,”但我不认为这是我的问题。
答案 0 :(得分:0)
这可能是一个愚蠢的问题,但您是否尝试创建独立于文章模型的标记?如果你还没有,那么可能是因为没有标记模型的数据库搞砸了。否则,协会看起来很好,应该工作。我能想到的另一件事是模型文件夹的文件名不正确