121 votes

Attribution d'une valeur par défaut lors de la création du fichier de migration

rails generate migration AddRetweetsCountToTweet retweets_count:integer 

Ok, j'utilise la ligne ci-dessus pour créer un fichier de migration qui génère automatiquement du code dans le fichier généré pour ajouter une colonne à un Tweet modèle avec le type de données integer. Maintenant, je veux ajouter une valeur par défaut à la colonne ajoutée tout en générant le fichier de migration. Est-ce possible ? Je l'ai cherché sur Google mais je n'ai pas trouvé. Les gars ont besoin d'aide.

0 votes

Voir le RailsGuide sur le sujet : guides.rubyonrails.org/migrations.html les informations que vous recherchez se trouvent dans la première section Anatomie d'une migration

1 votes

Je sais exactement ce que vous voulez dire. Je n'ai pas arrêté d'essayer de définir une valeur par défaut, et c'était assez pénible de trouver des informations. Générer simplement le SQL brut était plus facile, bien qu'il n'y ait pas de migration dans le contrôle de version.

187voto

taro Points 3137

Le générateur de migration par défaut ne gère pas les valeurs par défaut ( modificateurs de colonne sont prises en charge mais ne comprennent pas default o null ), mais vous pouvez créer votre propre générateur.

Vous pouvez également mettre à jour manuellement le fichier de migration avant de lancer l'application rake db:migrate en ajoutant les options à add_column :

add_column :tweet, :retweets_count, :integer, :null => false, :default => 0

... et lire API Rails

9 votes

Ok, merci pour la réponse. J'ai pensé que ce serait formidable si le générateur de migration par défaut offrait une option pour gérer les valeurs par défaut, de sorte que je n'aie pas à modifier le fichier de migration après qu'il a été généré afin de spécifier la valeur par défaut.

55voto

Jits Points 5595
t.integer :retweets_count, :default => 0

... devrait fonctionner.

Voir le Guide Rails sur les migrations

12voto

MSC Points 62

Oui, je ne voyais pas non plus comment utiliser 'default' dans la commande du générateur de migration mais j'ai pu spécifier une valeur par défaut pour une nouvelle colonne de chaîne comme suit en modifiant le fichier de migration généré avant d'appliquer "rake db:migrate" :

class AddColumnToWidgets < ActiveRecord::Migration
  def change
    add_column :widgets, :colour, :string, default: 'red'
  end
end

Cela ajoute une nouvelle colonne appelée "colour" à mon modèle "Widget" et définit la "couleur" par défaut des nouveaux widgets à "red".

5voto

Madhan Ayyasamy Points 1549

J'ai essayé t.boolean :active, :default => 1 dans le fichier de migration pour créer la table entière. Après avoir exécuté cette migration, lorsque j'ai vérifié dans la base de données, elle est devenue nulle. Même si j'ai indiqué que la valeur par défaut était "1". Après cela, j'ai légèrement modifié le fichier de migration comme ceci, puis cela a fonctionné pour moi pour définir la valeur par défaut sur le fichier de migration de création de table.

t.boolean :active, :null => false,:default =>1. Cela a fonctionné pour moi.

La version de mon framework Rails est 4.0.0.

3voto

Artur Pedrosa Points 21

Vous devriez d'abord créer votre migration pour les bases du modèle puis vous créez une autre migration pour modifier votre précédente en utilisant la colonne change_column ...

def change
    change_column :widgets, :colour, :string, default: 'red'
end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X