我有以下迁移:
def change
add_column :reports, :reportable_id, :integer
add_column :reports, :reportable_type, :integer
end
当我运行rake db:migrate时,出现以下错误:
== AddReportableToReports: migrating =========================================
-- add_column(:reports, :reportable_id, :integer)
rake aborted!
An error has occurred, this and all later migrations canceled:
PG::Error: ERROR: relation "reportables" does not exist
: ALTER TABLE "reports" ADD FOREIGN KEY ("reportable_id") REFERENCES "reportables" ("id")
这也给了我同样的错误:
change_table :reports do |t|
t.references :reportable, polymorphic: true
end
它表示reportables表不存在。我没有reportables表,因为这是一个多态关系。我该如何解决这个问题?
答案 0 :(得分:1)
当我设置对nil的引用时,我得到了它的工作:
add_column :reports, :reportable_id, :integer, references: nil
add_column :reports, :reportable_type, :string
REFERENCES关键字是外键约束的一部分,它会导致数据库要求引用表的指定列中的值也存在于引用的指定列中表。这意味着它希望有一个reportables表,但没有。显然,这是PostgreSQL特有的,因为我在MySQL中从未遇到过这个问题。