Supposons que j'ai créé une table table
dans une application Rails. Quelque temps plus tard, j'ajoute une colonne en cours d'exécution:
rails generate migration AddUser_idColumnToTable user_id:string.
Ensuite, je me rends compte que je dois ajouter user_id
comme index. Je connais la add_index
méthode, mais où doit-on appeler cette méthode? Suis-je censé lancer une migration (si oui, laquelle?), Puis ajouter manuellement cette méthode?
ruby-on-rails
indexing
migration
user1611830
la source
la source
:table
est le nom réel de la table, donc dans le cas d'uneusers
table, vous feriez substituer:users
à:table
.Si vous avez besoin de créer un,
user_id
il serait raisonnable de supposer que vous référencez une table utilisateur. Dans ce cas, la migration sera:Cette commande générera la migration suivante:
Après avoir exécuté à la
rake db:migrate
fois uneuser_id
colonne et un index seront ajoutés à laproducts
table.Dans le cas où vous avez juste besoin d'ajouter un index à une colonne existante, par exemple
name
d'uneuser
table, la technique suivante peut être utile:rails generate migration AddIndexToUsers name:string:index
générera la migration suivante:Supprimez la
add_column
ligne et exécutez la migration.Dans le cas décrit, vous auriez pu lancer une
rails generate migration AddIndexIdToTable index_id:integer:index
commande puis supprimer laadd_column
ligne de la migration générée. Mais je recommande plutôt d'annuler la migration initiale et d'ajouter une référence à la place:la source
Ajoutez dans la migration générée après avoir créé la colonne ce qui suit (exemple)
la source
Pour des références, vous pouvez appeler
Si, à l'avenir, vous devez ajouter un index général, vous pouvez lancer ce
Générer du code:
la source
Vous pouvez l'utiliser, pensez simplement que Job est le nom du modèle auquel vous ajoutez l'index cader_id :
la source