Rails : 与同一模型的双重关联

Rails : double association with same Model

我使用相同的 Word 模型创建了一个双“同义词”关联,如下所示:

class Synonym < ApplicationRecord   
    belongs_to :word_origin, :class_name => "Word"
    belongs_to :word_synonym, :class_name => "Word"
end

这是我的 Word 模型:

class Word < ApplicationRecord
  has_many :word_synonyms, :class_name => 'Word', :foreign_key => 'word_synonym_id', dependent: :destroy
  has_many :word_origins, :class_name => 'Word', :foreign_key => 'word_origin_id', dependent: :destroy
end

但是,当我尝试删除一个单词时,出现以下错误:

ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column words.word_synonym_id does not exist)

知道我的双重关联有什么问题吗?谢谢。

编辑:这里是单词和同义词的架构

create_table "words", force: :cascade do |t|
    t.string "content"
    t.string "slug"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.index ["content"], name: "index_words_on_content", opclass: :gin_trgm_ops, using: :gin
  end

create_table "synonyms", force: :cascade do |t|
    t.bigint "word_origin_id"
    t.bigint "word_synonym_id"
    t.index ["word_origin_id"], name: "index_synonyms_on_word_origin_id"
    t.index ["word_synonym_id"], name: "index_synonyms_on_word_synonym_id"
  end

Word 在没有所需列的情况下引用自身。您必须将行更改为

has_many :word_synonyms, class_name: 'Synonym', 
         foreign_key: 'word_synonym_id', dependent: :destroy

has_many :word_origins, class_name: 'Synonym', 
         foreign_key: 'word_origin_id', dependent: :destroy