Je ne parviens pas à nommer et je me rends compte qu'il existe un meilleur ensemble de noms pour mes modèles dans mon application Rails.
Existe-t-il un moyen d'utiliser une migration pour renommer un modèle et la table correspondante?
Voici un exemple:
class RenameOldTableToNewTable < ActiveRecord::Migration
def self.up
rename_table :old_table_name, :new_table_name
end
def self.down
rename_table :new_table_name, :old_table_name
end
end
Je devais aller et renommer le fichier de déclaration de modèle manuellement.
Edit:
Dans Rails 3.1 & 4, ActiveRecord::Migration::CommandRecorder
sait comment inverser les migrations rename_table. Vous pouvez ainsi:
class RenameOldTableToNewTable < ActiveRecord::Migration
def change
rename_table :old_table_name, :new_table_name
end
end
(Vous devez toujours passer et renommer manuellement vos fichiers.)
Dans Rails 4 tout ce que je devais faire était de changer la définition
def change
rename_table :old_table_name, :new_table_name
end
Et tous mes index ont été pris en charge pour moi. Je n'avais pas besoin de mettre à jour manuellement les index en supprimant les anciens et en ajoutant de nouveaux.
Et cela fonctionne en utilisant le changement pour monter ou descendre par rapport aux index également.
Les autres réponses et commentaires portaient sur le changement de nom de table, de fichier et sur votre code.
J'aimerais ajouter quelques mises en garde supplémentaires:
Prenons un exemple concret auquel je suis confronté aujourd’hui: renommer un modèle de "Merchant" à "Business".
Vous devez également remplacer vos index:
class RenameOldTableToNewTable< ActiveRecord:Migration
def self.up
remove_index :old_table_name, :column_name
rename_table :old_table_name, :new_table_name
add_index :new_table_name, :column_name
end
def self.down
remove_index :new_table_name, :column_name
rename_table :new_table_name, :old_table_name
add_index :old_table_name, :column_name
end
end
Et renommez vos fichiers, etc. manuellement, comme décrit dans les autres réponses.
Voir: http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Assurez-vous de pouvoir revenir en arrière et revenir en arrière après avoir écrit cette migration. Cela peut devenir délicat si vous vous trompez et que vous vous retrouvez avec une migration qui tente de réaliser quelque chose qui n'existe plus. Il est préférable de supprimer toute la base de données et de recommencer si vous ne pouvez pas revenir en arrière. Alors sachez que vous pourriez avoir besoin de sauvegarder quelque chose.
Également: recherchez schema_db pour tout nom de colonne pertinent dans les autres tables définies par has_ ou apart_to ou quelque chose d'autre. Vous aurez probablement besoin de les éditer aussi.
Et enfin, le faire sans une suite de tests de régression serait fou.