Lorsque vous extrayez un nouveau projet à partir de zéro, vous ne devez pas utiliser les migrations pour générer la base de données. Vous devez utiliser rake db:schema:load
à la place.
Laissez-moi vous montrer pourquoi. Supposons que vous créez un nouveau modèle Post
avec une table de post sur la migration 10. Lors de la migration 11, vous exécutez des élaborations spéciales sur le modèle Post
. Après un certain temps, vous décidez de supprimer le modèle Post
et la table des postes car ils ne sont plus requis.
Six mois plus tard, vous vérifiez le projet à partir de zéro. Si vous essayez d'exécuter rake db:migrate
, la migration 11 échouera à se plaindre du modèle manquant. C'est vrai, le modèle a été retiré plusieurs mois auparavant et il n'est plus disponible. Au lieu de cela, si vous exécutez rake db:schema:load
, vous initialisez la base de données avec la bonne version de schéma.
En parlant de migrations, si vous venez de créer la méthode du code postal et que vous essayez d'utiliser le _changed? méthode magique dans la même migration, vous devez recharger le schéma avant.
class MigrationFile < ...
self.up
add_column :user, :postcode, :string
User.all.each { |user| puts user.postcode_changed? } # will fail
User.reset_column_information
User.all.each { |user| puts user.postcode_changed? } # now it works
end
...
end
Je devrais probablement souligner que ce code est dans le modèle, pas le contrôleur, mais je vois votre point. –
Je n'ai jamais parlé du contrôleur. –