Ajouter une colonne à la table et corriger la valeur des enregistrements existants dans Rails
Je veux ajouter une colonne appelée "payment_type" dans ma table "commandes".
Voici la migration que j'ai jusqu'à présent:
def change
add_column :orders, :payment_type, :string
end
Je veux que payment_type pour contenir la valeur "normale" pour tous les dossiers qui sont actuellement dans la DB. Cependant, pas pour l'avenir des enregistrements. Je ne veux pas de valeur par défaut pour les enregistrements futurs. Comment puis-je faire cela?
source d'informationauteur Hommer Smith
Vous devez vous connecter pour publier un commentaire.
Que vous voulez juste pour définir les valeurs de tous enregistrements existants, vous pouvez utiliser
update_all
ce qui est beaucoup plus rapide que boucler sur toutes les instances de l'ordre, car il utilise une base de données juste de déclarations et de ne pas instancier toutes les commandes:update_all
ne pas appeler tous les validations ou des déclencheurs.Je pense que la meilleure façon de le faire:
Et après que la vérifier dans la console:
Si vous voulez à la mise à jour de la colonne de bâton de la migration, puis au-dessus de réponses, c'est génial,
Mais si vous souhaitez mettre à jour la colonne localement sur votre propre machine, de sorte que lorsque vous partagez un code alors que d'autres sont incapables de voir la mise à jour de l'attribut, simple, allez à la console Rails et boucle...
Rails 4
Comme d'autres l'ont mentionné, il est préférable de ne pas compter sur les Classes qui peuvent être supprimées à l'avenir, car il serait frein à la migration.
Au lieu de cela j'ai utiliser pour exécuter des premières mySQL directement: