如何在rails 4.2中的迁移文件中添加数据库级外键?

时间:2015-10-08 07:08:42

标签: ruby-on-rails

我已经经历了一些类似的问题,但人们没有找到合适的解决方案。我也看到一些人使用这种方法 - add_foreign_key

 class CreateTaskLists < ActiveRecord::Migration
  def change
    create_table :task_lists do |t|
      t.string :name
      t.references :user
      t.timestamps
    end
    add_foreign_key :task_lists, :users
  end
end

但它抛出了未定义的方法错误。

undefined method `add_foreign_key' for 
#<CreateTaskLists:0x007ffe9a5cd578>
/Users/sushilkumar/.rvm/gems/ruby-2.2.3/gems/
activerecord-4.0.0/lib/active_record/
migration.rb:624:in `block in method_missing'

How to add foreign key in rails migration with different table name 我不知道,这对他们有什么用?

4 个答案:

答案 0 :(得分:2)

您可以使用references

尝试这种方式
class CreateTaskLists < ActiveRecord::Migration
  def change
    create_table :task_lists do |t|
      t.string :name
      t.references :user, index: true
      t.timestamps
    end
    add_foreign_key :task_lists, :users
  end
end

答案 1 :(得分:1)

class CreateTaskLists < ActiveRecord::Migration
  def change
    create_table :task_lists do |t|
      t.string :name
      t.references :user, index: true
      t.timestamps
    end
    add_foreign_key :task_lists, :users
  end
end

试试这个

答案 2 :(得分:1)

您是否打算参考表格User而不是Users?如果是这样,您在制作参考时必须使用单数(:user):

class CreateTaskLists < ActiveRecord::Migration
 def change
   create_table :task_lists do |t|
     t.string :name
     t.references :user
     t.timestamps
   end
   add_foreign_key :task_lists, :users
 end

答案 3 :(得分:0)

希望这对你有用。

class CreateTaskLists < ActiveRecord::Migration
  def change
    create_table :task_lists do |t|
      t.string :name
      t.references :user
      t.timestamps
    end
    add_foreign_key :users, :task_lists
  end
end