我正在使用 Rails 4.2.3。如何创建将向与表类型相同的表添加列的迁移?此外,如何添加外键(如果该列为 NULL 就可以)?我试过了
class AddLinkedMyObjectToMyObjects < ActiveRecord::Migration
def change
add_reference :my_objects, :linked_my_object, type: :my_object, index: true, foreign_key: true
end
end
但是我在运行迁移时遇到了这个错误
== 20160616201701 AddLinkedMyObjectToMyObjects: migrating =============================
-- add_reference(:my_objects, :linked_my_object, {:type=>:my_object, :index=>true, :foreign_key=>true})
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
PG::UndefinedObject: ERROR: type "my_object" does not exist
LINE 1: ALTER TABLE "MyObjects" ADD "linked_my_object_id" my_object
^
: ALTER TABLE "MyObjects" ADD "linked_my_object_id" my_object
/Users/davea/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `async_exec'
/Users/davea/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `block in execute'
/Users/davea/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:472:in `block in log'
最佳答案
我认为你需要“手动”完成:
add_column :my_objects, :linked_my_object_id, :integer
add_index :my_objects, :linked_my_object_id
add_foreign_key :my_objects, :my_objects, column: :linked_my_object_id
然后在MyObject
类中这样说:
belongs_to :linked_my_object, class_name: MyObject
has_many :my_objects, foreign_key: :linked_my_object_id
关于postgresql - 在 Rails 中,如何创建将向与该表类型相同的表添加列/外键的迁移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37868708/