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 }