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

104
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 de Tweet avec un entier de type de données. 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 je n'ai pas trouvé. Les gars ont besoin d'aide.

kxhitiz
la source
voir le RailsGuide sur le sujet: guides.rubyonrails.org/migrations.html l'information que vous recherchez se trouve dans la première section Anatomie d'une migration
Austin Lin
1
Je sais exactement ce que vous voulez dire. J'ai continué à essayer de définir une valeur par défaut, et c'était un peu pénible d'essayer de trouver des informations. La simple génération du SQL nu était plus facile, bien qu'il n'y ait pas de migration dans le contrôle de version.
Tass

Réponses:

166

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 defaultou null), mais vous pouvez créer votre propre générateur.

Vous pouvez également mettre à jour manuellement le fichier de migration avant de l'exécuter rake db:migrateen ajoutant les options à add_column:

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

... et lisez l' API Rails

taro
la source
9
Ok merci pour la réponse. J'ai pensé que ce serait formidable si le générateur de migration par défaut fournissait une option pour gérer les valeurs par défaut afin de ne pas avoir à modifier le fichier de migration après avoir été généré afin de spécifier la valeur par défaut.
kxhitiz
9

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 «couleur» à mon modèle «Widget» et définit la «couleur» par défaut des nouveaux widgets sur «rouge».

MSC
la source
(C'était dans Rails 4.2.)
MSC
4

J'ai essayé t.boolean: active,: default => 1 dans le fichier de migration pour créer une table entière. Après avoir exécuté cette migration lorsque j'ai vérifié dans db, elle a été rendue nulle. Même si j'ai dit par défaut comme "1". Après cela, j'ai légèrement modifié le fichier de migration comme celui-ci, 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. A travaillé pour moi.

La version du framework My Rails est 4.0.0

Madhan Ayyasamy
la source
:default => false?
Christopher Oezbek
2

Vous devrez 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 le change_column ...

def change
    change_column :widgets, :colour, :string, default: 'red'
end
Artur Pedrosa
la source