add_foreign_key不会生成新列

时间:2017-01-01 21:12:03

标签: ruby-on-rails ruby activerecord foreign-keys

我为表orders创建了一个新的迁移,并期望表用户使用外键user_idOrder:User=N:1之间的关系。迁移文件是:

class CreateOrders < ActiveRecord::Migration
  def change
    create_table :orders do |t|
      t.datetime :begin
      t.integer :plan
      t.boolean :activiated
      t.timestamps null: false
    end
    add_foreign_key :orders, :users
  end
end

完成rake db:migration后,我登录rails console:

2.1.10 :010 >   Order.column_names
 => ["id", "begin", "plan", "activiated", "created_at", "updated_at"] 
2.1.10 :011 > User.column_names
 => ["id", "name", "email", "created_at", "updated_at", "password_digest", ...] 

但是我找不到user_id列。

我跟着3.6 Foreign Keys,其中说外键应该在那里。有什么我想念的吗?谢谢。

2 个答案:

答案 0 :(得分:1)

就像它在指南中说的那样

add_foreign_key :articles, :authors
  

这会在文章的author_id列中添加一个新的外键   表

它在列上添加了外键约束,该列必须已经在表中。因此,您必须在迁移之前将其包括在内。

create_table :orders do |t|
  t.datetime :begin
  t.integer :user_id
  t.integer :plan
  t.boolean :activiated
  t.timestamps null: false
end
add_foreign_key :orders, :users

答案 1 :(得分:0)

您只需运行rake db:rollback,然后在早期的迁移文件中添加t.integer :user_id并保存文件即可。

然后运行rake db:migrate。希望这有助于在特定情况下解决您的问题。