web-dev-qa-db-fra.com

Affectation de la 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 modèle Tweet avec un type de données entier. Maintenant, je veux ajouter une valeur par défaut à la colonne ajoutée lors de la génération du fichier de migration. Est-ce possible? Je l'ai googlé mais n'ai pas pu trouver. Les gars ont besoin d'aide.

95
kxhitiz

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

Vous pouvez également mettre à jour manuellement le fichier de migration avant d’exécuter rake db:migrate en ajoutant les options à add_column:

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

... et lisez API Rails

158
taro
t.integer :retweets_count, :default => 0

... devrait marcher.

Voir le Guide Rails sur les migrations

42
Jits

Oui, je ne voyais pas non plus comment utiliser "default" dans la commande du générateur de migration, mais je pouvais spécifier une valeur par défaut pour une nouvelle colonne de chaîne, 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 "couleur" à mon modèle "Widget" et définit la "couleur" par défaut des nouveaux widgets sur "rouge".

6
MSC

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 était nulle. Même si j'ai dit par défaut que "1". Après cela, j’ai légèrement modifié le fichier de migration, ce qui a fonctionné pour moi afin de définir la valeur par défaut du fichier de migration de la table.

t.boolean: active,: null => false,: default => 1. Travaillé pour moi.

Mon Rails est 4.0.0

3
Madhan Ayyasamy