Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql rails迁移中的唯一外键_Mysql_Ruby On Rails_Ruby_Ruby On Rails 4_Activerecord - Fatal编程技术网

Mysql rails迁移中的唯一外键

Mysql rails迁移中的唯一外键,mysql,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,Mysql,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,在迁移文件中,我使用以下语法添加外键 class CreatePreferences < ActiveRecord::Migration def change create_table :preferences do |t| t.integer :user_id, null: false t.timestamps null: false end add_foreign_key :preferences, :users, column: :

在迁移文件中,我使用以下语法添加外键

class CreatePreferences < ActiveRecord::Migration
  def change
    create_table :preferences do |t|
      t.integer :user_id, null: false
      t.timestamps null: false
    end
    add_foreign_key :preferences, :users, column: :user_id, dependent: :destroy, :unique => true
  end
end
使用迁移添加唯一外键的正确方法是什么

我可以在模型本身中添加唯一性验证。但是,如果我有多个工人在运行,就不会万无一失。()

class CreatePreferencestrue
添加索引:首选项,:用户id,唯一:true
结束
结束

在Rails 5中,您可以通过更优雅的:

t.belongs_to :user, foreign_key: true, index: { unique: true }
这将生成外键约束和唯一索引。如果这是一个必需的关联,请不要忘记添加
null:false
(在原始问题中听起来像这样)


请注意,
属于
只是
引用的别名

我想你应该添加索引,使其在数据库级别上唯一。我需要在
添加外键
添加索引
这两个
中都有
唯一
吗?
外键
索引
是不同的东西,因此,我认为在Rails 5.2中,您可以同时使用
unique
unique
不是一个有效的选项,并且被默默地忽略。然而,这是一个有效的选择。
class CreatePreferences < ActiveRecord::Migration
  def change
    create_table :preferences do |t|
      t.integer :user_id, null: false
      t.timestamps null: false
    end
    add_foreign_key :preferences, :users, column: :user_id, dependent: :destroy, :unique => true
    add_index :preferences, :user_id, unique: true
  end
end
t.belongs_to :user, foreign_key: true, index: { unique: true }