Ruby on rails Rails数据库迁移可以';不要添加外键

Ruby on rails Rails数据库迁移可以';不要添加外键,ruby-on-rails,rails-migrations,Ruby On Rails,Rails Migrations,我在rails项目中运行迁移时遇到问题 我简单地添加了两个表: class ModifyCurrentTablesToNewDesign < ActiveRecord::Migration def change # Some other migrations... # New Table Companies create_table :companies do |t| t.string :name end # New Tabl

我在rails项目中运行迁移时遇到问题

我简单地添加了两个表:

class ModifyCurrentTablesToNewDesign < ActiveRecord::Migration
  def change

    # Some other migrations...

    # New Table Companies

    create_table :companies do |t|
      t.string :name
    end

    # New Table Teams

    create_table :teams do |t|
      t.string :name
      t.belongs_to :companies, :index => true, :foreign_key => true
    end

    # Some oooother migrations...

  end
end
class ModifyCurrentTablesToNewDesigntrue,:foreign\u key=>true
结束
#一些其他的迁移。。。
结束
结束
当你运行它时,我得到了:

-- create_table(:companies)
   -> 0.0036s
-- create_table(:teams)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::UndefinedColumn: ERROR:  column "company_id" referenced in foreign key constraint does not exist
: ALTER TABLE "teams" ADD CONSTRAINT "fk_rails_e080df8a94"
FOREIGN KEY ("company_id")
  REFERENCES "companies" ("id")
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `async_exec'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `block in execute'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract_adapter.rb:473:in `block in log'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.2.3/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract_adapter.rb:467:in `log'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/postgresql/database_statements.rb:154:in `execute'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:762:in `add_foreign_key'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:217:in `block in create_table'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:216:in `each_pair'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:216:in `create_table'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:661:in `block in method_missing'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:631:in `block in say_with_time'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:631:in `say_with_time'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:651:in `method_missing'
/Users/julian/Development/sikuani/plataforma-eventos/db/migrate/20160121164754_modify_current_tables_to_new_design.rb:35:in `change'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:605:in `exec_migration'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:589:in `block (2 levels) in migrate'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:588:in `block in migrate'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:292:in `with_connection'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:587:in `migrate'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:764:in `migrate'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:994:in `block in execute_migration_in_transaction'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:1040:in `block in ddl_transaction'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/transaction.rb:184:in `within_new_transaction'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/transactions.rb:220:in `transaction'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:1040:in `ddl_transaction'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:993:in `execute_migration_in_transaction'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:955:in `block in migrate'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:951:in `each'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:951:in `migrate'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:819:in `up'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:797:in `migrate'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/tasks/database_tasks.rb:137:in `migrate'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.3/lib/active_record/railties/databases.rake:44:in `block (2 levels) in <top (required)>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
——创建表格(:公司)
->0.0036s
--创建表格(:团队)
雷克流产了!
StandardError:发生错误,此迁移和所有后续迁移已取消:
PG::UndefinedColumn:错误:外键约束中引用的列“company_id”不存在
:更改表格“团队”添加约束“fk_rails_e080df8a94”
外键(“公司id”)
参考“公司”(“id”)
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/connection\u adapters/postgresql/database\u statements.rb:155:in'async\u exec'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/connection\u adapters/postgresql/database\u语句
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_-record/connection_-adapters/abstract_-adapter.rb:473:in“block in log”
/Library/Ruby/Gems/2.0.0/Gems/activesupport-4.2.3/lib/active\u support/notifications/instrumenter.rb:20:in'instrument'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u-record/connection\u-adapters/abstract\u-adapter.rb:467:in`log'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/connection\u adapters/postgresql/database\u语句。rb:154:in'execute'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/connection\u adapters/abstract/schema\u statements.rb:762:in'add\u foreign\u key'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/connection\u adapters/abstract/schema\u语句。rb:217:in`block in create\u table'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u-record/connection\u-adapters/abstract/schema\u语句。rb:216:“每对”中
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/connection\u adapters/abstract/schema\u语句。rb:216:in“create\u table”
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/migration.rb:661:“方法中的块丢失”
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/migration.rb:631:in`block in say_with_time'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/migration.rb:631:in“随时间说”
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_record/migration.rb:651:in'method_missing'
/Users/julian/Development/sikuani/plataforma eventos/db/migrate/20160121164754\u将当前表修改为新设计。rb:35:in“变更”
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/migration.rb:605:in'exec\u migration'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_record/migration.rb:589:migrate中的“块(2级)”中
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_record/migration.rb:588:in'block in migrate'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/connection\u adapters/abstract/connection\u pool.rb:292:in“with\u connection”
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_record/migration.rb:587:in“migrate”
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_record/migration.rb:764:in“migrate”
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/migration.rb:994:in`block in execute\u migration\u in\u transaction'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_record/migration.rb:1040:in`block in ddl_transaction'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/connection\u adapters/abstract/database\u语句。rb:213:在“事务中的块”中
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u-record/connection\u-adapters/abstract/transaction.rb:184:in'within\u new\u transaction'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_-record/connection_-adapters/abstract/database_-statements.rb:213:in'transaction'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_record/transactions.rb:220:in'transaction'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_record/migration.rb:1040:in'ddl_transaction'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/migration.rb:993:“在事务中执行迁移”
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_record/migration.rb:955:in“block in migrate”
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_record/migration.rb:951:in'each'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_record/migration.rb:951:in“migrate”
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_record/migration.rb:819:in'up'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_record/migration.rb:797:in'migrate'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active\u record/tasks/database\u tasks.rb:137:in'migrate'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.2.3/lib/active_record/railties/databases.rake:44:in“block(2层)in”
任务:TOP=>db:migrate
(通过使用--trace运行任务查看完整跟踪)
当创建表
companys
时,默认情况下,不应该在其中创建列
id
?你能理解为什么会发生这种情况吗?

看来你在公司和团队之间有着1:M的关系。 您需要使用单数,因为团队属于单个公司,而不是多个公司

t.belongs_to :company, :index => true, :foreign_key => true

成功了。。。但是现在我很困惑:/,如果表名为
companys
(复数),那么表名之间就没有关系了?这样想,一个团队属于一个公司,而不是多个公司。