Ruby on rails 在Rails 5中添加关系

Ruby on rails 在Rails 5中添加关系,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在rails应用程序上创建了两个表:Contact和Category,使用ff: rails g控制器联系人姓名电子邮件 rails g车型类别标题 两者都已迁移。正如你所看到的,这两者没有关系。我的问题是如何建立关系,以便在联系人模型上有category\u id字段 有rails命令吗?或者一些我可以运行的迁移命令 更新: 我试图运行此程序,但在rails db:migrate上出现以下错误: rails aborted! SyntaxError: /home/jojo/Desktop/c

我在rails应用程序上创建了两个表:
Contact
Category
,使用ff:

rails g控制器联系人姓名电子邮件

rails g车型类别标题

两者都已迁移。正如你所看到的,这两者没有关系。我的问题是如何建立关系,以便在联系人模型上有
category\u id
字段

有rails命令吗?或者一些我可以运行的迁移命令

更新:

我试图运行此程序,但在
rails db:migrate
上出现以下错误:

rails aborted!
SyntaxError: /home/jojo/Desktop/contacthub/db/migrate/20200108110024_create_contacts.rb:5: syntax error, unexpected tSYMBEG, expecting end
      t.string :email,
               ^
/home/jojo/Desktop/contacthub/db/migrate/20200108110024_create_contacts.rb:7: syntax error, unexpected tSYMBEG, expecting end
      t.string :phone,
               ^
/home/jojo/Desktop/contacthub/db/migrate/20200108110024_create_contacts.rb:9: syntax error, unexpected tSYMBEG, expecting end
      t.string :address,
               ^
/home/jojo/Desktop/contacthub/db/migrate/20200108110024_create_contacts.rb:11: syntax error, unexpected tSYMBEG, expecting end
      t.string :state,
               ^
/home/jojo/Desktop/contacthub/db/migrate/20200108110024_create_contacts.rb:13: syntax error, unexpected tSYMBEG, expecting end
      t.text :note
             ^
/home/jojo/Desktop/contacthub/db/migrate/20200108110024_create_contacts.rb:17: syntax error, unexpected end, expecting end-of-input
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activesupport-5.2.4.1/lib/active_support/dependencies.rb:291:in `block in require'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activesupport-5.2.4.1/lib/active_support/dependencies.rb:257:in `load_dependency'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activesupport-5.2.4.1/lib/active_support/dependencies.rb:291:in `require'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:986:in `load_migration'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:982:in `migration'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:977:in `disable_ddl_transaction'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:1350:in `use_transaction?'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:1342:in `ddl_transaction'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:1291:in `execute_migration_in_transaction'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:1263:in `block in migrate_without_lock'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:1262:in `each'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:1262:in `migrate_without_lock'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:1210:in `block in migrate'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:1363:in `with_advisory_lock'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:1210:in `migrate'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:1036:in `up'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:1011:in `migrate'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/tasks/database_tasks.rb:172:in `migrate'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/railties/databases.rake:60:in `block (2 levels) in <main>'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/railties-5.2.4.1/lib/rails/commands/rake/rake_command.rb:23:in `block in perform'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/railties-5.2.4.1/lib/rails/commands/rake/rake_command.rb:20:in `perform'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/railties-5.2.4.1/lib/rails/command.rb:48:in `invoke'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/railties-5.2.4.1/lib/rails/commands.rb:18:in `<main>'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activesupport-5.2.4.1/lib/active_support/dependencies.rb:291:in `block in require'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activesupport-5.2.4.1/lib/active_support/dependencies.rb:257:in `load_dependency'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activesupport-5.2.4.1/lib/active_support/dependencies.rb:291:in `require'
/home/jojo/Desktop/contacthub/bin/rails:9:in `<top (required)>'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/spring-2.1.0/lib/spring/client/rails.rb:28:in `load'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/spring-2.1.0/lib/spring/client/rails.rb:28:in `call'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/spring-2.1.0/lib/spring/client/command.rb:7:in `call'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/spring-2.1.0/lib/spring/client.rb:30:in `run'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/spring-2.1.0/bin/spring:49:in `<top (required)>'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `load'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `<top (required)>'
/home/jojo/Desktop/contacthub/bin/spring:15:in `require'
/home/jojo/Desktop/contacthub/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
rails中止!
语法错误:/home/jojo/Desktop/contacthub/db/migrate/20200108110024\u create\u contacts.rb:5:语法错误,意外的tSYMBEG,预期结束
t、 字符串:电子邮件,
^
/home/jojo/Desktop/contacthub/db/migrate/20200108110024_create_contacts.rb:7:语法错误,意外的tSYMBEG,预期结束
t、 字符串:电话,
^
/home/jojo/Desktop/contacthub/db/migrate/20200108110024\u create\u contacts.rb:9:语法错误,意外的tSYMBEG,预期结束
t、 字符串:地址,
^
/home/jojo/Desktop/contacthub/db/migrate/20200108110024\u create\u contacts.rb:11:语法错误,意外的tSYMBEG,预期结束
t、 字符串:state,
^
/home/jojo/Desktop/contacthub/db/migrate/20200108110024\u create\u contacts.rb:13:语法错误,意外的tSYMBEG,预期结束
t、 正文:注
^
/home/jojo/Desktop/contacthub/db/migrate/20200108110024\u create\u contacts.rb:17:语法错误,意外结束,预期输入结束
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load\u path\u cache/core\u ext/kernel\u require.rb:22:in'require'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in`block in require_with_bootsnap_lfi'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load\u path\u cache/load\u features\u index.rb:92:在“寄存器”中
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in`require_with_bootsnap_lfi'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load\u path\u cache/core\u ext/kernel\u require.rb:30:in'require'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activesupport-5.2.4.1/lib/active\u-support/dependencies.rb:291:in`block in require'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activesupport-5.2.4.1/lib/active\u support/dependencies.rb:257:in'load\u dependency'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activesupport-5.2.4.1/lib/active\u support/dependencies.rb:291:in'require'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active\u record/migration.rb:986:in'load\u migration'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:982:in“migration”
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:977:在“禁用ddl_事务”中
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active\u record/migration.rb:1350:正在“使用”事务中
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active\u record/migration.rb:1342:in'ddl\u transaction'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active\u record/migration.rb:1291:in“execute\u migration\u in\u transaction”
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active\u record/migration.rb:1263:in`block in migrate\u without\u lock'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:1262:in'each'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active\u record/migration.rb:1262:in'migrate\u without\u lock'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:1210:在“迁移中的块”中
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active\u record/migration.rb:1363:in“带锁”
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/migration.rb:1210:in“migrate”
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active\u record/migration.rb:1036:in'up'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active\u record/migration.rb:1011:in“migrate”
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active\u record/tasks/database\u tasks.rb:172:在“迁移”中
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.4.1/lib/active_record/railties/databases.rake:60:in `块(2层)in'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/railties-5.2.4.1/lib/rails/commands/rake/rake_command.rb:23:in'block in perform'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/railties-5.2.4.1/lib/rails/commands/rake/rake_command.rb:20:in'perform'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/railties-5.2.4.1/lib/rails/command.rb:48:in'invoke'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/railties-5.2.4.1/lib/rails/commands.rb:18:in`'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load\u path\u cache/core\u ext/kernel\u require.rb:22:in'require'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in`block in require_with_bootsnap_lfi'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load\u path\u cache/load\u features\u index.rb:92:在“寄存器”中
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in`require_with_bootsnap_lfi'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load\u path\u cache/core\u ext/kernel\u require.rb:30:in'require'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activesupport-5.2.4.1/lib/active\u-support/dependencies.rb:291:in`block in require'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activesupport-5.2.4.1/lib/active\u support/dependencies.rb:257:in'load\u dependency'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/activesupport-5.2.4.1/lib/active\u support/dependencies.rb:291:in'require'
/home/jojo/Desktop/contacthub/bin/rails:9:in`'
/home/jojo/.rvm/gems/ruby-2.6.0/gems/spring-2
class CreateContacts < ActiveRecord::Migration[5.2]
  def change
    create_table :contacts do |t|
      t.string :name,
      t.string :email,
      t.string :mobile,
      t.string :phone,
      t.string :country,
      t.string :address,
      t.string :city,
      t.string :state,
      t.string :zip,
      t.text :note
      t.references :category, foreign_key: true
    end
  end
end
add_reference :contacts, :category, foreign_key: true, null: false
add_index :contacts, :category_id
create_table :contacts do |t|
  t.references :category, foreign_key: true, null: false, index: true
  ...
end
class CreateContacts < ActiveRecord::Migration[5.2]
  def change
    create_table :contacts do |t|
      t.string :name
      t.string :email
      t.string :mobile
      t.string :phone
      t.string :country
      t.string :address
      t.string :city
      t.string :state
      t.string :zip
      t.text :note
      t.references :category, foreign_key: true
    end
  end
end
numbers = { 
  one: "eins", 
  two: "zwei", 
  three: "drei" 
}