【问题标题】:Rails : double association with same ModelRails:与同一模型的双重关联
【发布时间】:2020-09-06 17:04:19
【问题描述】:

我使用相同的 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 不存在)

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

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

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

【问题讨论】:

    标签: ruby-on-rails activerecord model


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      相关资源
      最近更新 更多