ActiveRecord抱怨列(供参考)不存在,所以我手动创建它并抱怨它确实存在

时间:2017-10-10 15:02:16

标签: ruby-on-rails ruby activerecord

假设进行以下迁移:

class AddSectionReferences < ActiveRecord::Migration
  def change

    add_reference :sections, :sections, index: true, foreign_key: true, on_delete: :nullify 
    add_reference :sections, :parent
  end
end

它抱怨道:

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:  column "section_id" referenced in foreign key constraint does not exist
: ALTER TABLE "sections" ADD CONSTRAINT "fk_rails_810c69e885"

所以,如果我添加:

add_column :sections, :sections_id, :integer
在参考之前

然后抱怨:

ActiveRecord::StatementInvalid: PG::DuplicateColumn: ERROR:  column "sections_id" of relation "sections" already exists
: ALTER TABLE "sections" ADD "sections_id" integer

发生了什么,当我尝试创建一个复数列(对于has_many)时,为什么在第一个错误中寻找section_id列?

1 个答案:

答案 0 :(得分:1)

  

当我试图创建一个复数列(对于has_many)时?

你从错误的一端接近这个。您如何想象此列包含多个/无限ID?这不是铁路公司期望的事情。

has_many关系中,外键列位于belongs_to侧。列名称应该是单数,自然。因为它只能容纳一个id。

t.references :section