postgresql - 在 Rails 中,如何创建将向与该表类型相同的表添加列/外键的迁移?

标签 postgresql ruby-on-rails-4 foreign-keys migration

我正在使用 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/

相关文章:

sql - 如何在 Postgresql 中将字段转换为 JSON

ruby-on-rails - 如何在一次交易中保存相关模型?

求助MySQL FOREIGN KEY

mysql - #1005 - 无法创建表 `agenceassurance` .`operation`(错误号 : 150 "Foreign key constraint is incorrectly formed")

node.js - Sequelize连接和关系

postgresql - 如何使用liquibase中的一些默认时间戳更新日期列

database - PostgreSQL:需要在从文件复制还是从标准输入复制之间进行选择

sql - Postgres 选择非正则表达式查询

ruby-on-rails - Rails has_many :through association

ruby - 在 Ruby 中找到第一个可能匹配的哈希键的优雅方式