Comment créer une nouvelle table, via une migration Rails, et y ajouter un index unique?
Dans les documents, j'ai trouvé comment ajouter un index à une table après sa création, mais comment faites-vous les deux - créer la table et ajouter l'index unique - dans le même fichier de migration?
Voici le processus complet:
Générez une migration (Rails generate migration CreateFoos bar:string
)
Modifiez votre migration pour qu'elle ressemble à ceci:
class CreateFoos < ActiveRecord::Migration
def change
create_table :foos do |t|
t.string :bar, :null => false
t.index :bar, unique: true
end
end
end
Courir rake db:migrate
Une manière plus compacte:
class CreateFoobars < ActiveRecord::Migration
def change
create_table :foobars do |t|
t.string :name, index: {unique: true}
end
end
end
Après avoir généré une migration Rails generate migration CreateBoards name:string description:string
Dans le fichier de migration, ajoutez un index comme indiqué ci-dessous:
class CreateBoards < ActiveRecord::Migration
def change
create_table :boards do |t|
t.string :name
t.string :description
t.timestamps
end
add_index :boards, :name, unique: true
end
end
Vous pouvez créer la table et l'index avec le générateur sans modifier le fichier de migration
Pour un index unique
Rails generate model CreateFoos bar:string:uniq
Pour un index non unique
Rails generate model CreateFoos bar:string:index
Dans Rails 5, vous pouvez fournir des options d'index ainsi que la définition des colonnes.
create_table :table_name do |t|
t.string :key, null: false, index: {unique: true}
t.jsonb :value
t.timestamps
end
Column | Type | Collation | Nullable | Default
------------+-----------------------------+-----------+----------+-----------------------------------------
id | bigint | | not null | nextval('table_name_id_seq'::regclass)
key | character varying | | not null |
value | jsonb | | |
created_at | timestamp without time zone | | not null |
updated_at | timestamp without time zone | | not null |
Indexes:
"table_name_pkey" PRIMARY KEY, btree (id)
"index_table_name_on_key" UNIQUE, btree (key)