web-dev-qa-db-fra.com

comment définir la valeur par défaut sur la colonne dans Rails lors de la création de la migration

Je suis nouveau sur Model in Rails. Je sais comment créer un modèle et comment y ajouter une colonne. Maintenant, je veux définir la valeur par défaut d'une colonne, mais je ne comprends pas exactement comment je peux le faire.

J'ai généré un nouveau modèle

Rails g model User

puis ajouté une colonne

Rails generate migration AddNotificationEmailToUsers notification_email:boolean

Maintenant, je veux définir la valeur par défaut de la colonne Notification comme vraie. Veuillez me guider pour écrire la migration pour la même chose. Je vous remercie!!!

22
mandar.gokhale

Vous ne pouvez pas le faire à partir de la ligne de commande - vous devrez modifier le fichier de migration et changer la ligne correspondante en quelque chose comme

add_column :users, :notification_email, :boolean, :default => true
50
Frederick Cheung

La meilleure approche consiste à utiliser change_column dans votre migration. Il est annoncé pour changer de type mais vous pouvez l'utiliser pour attacher une valeur par défaut à une colonne existante.

J'ai eu

location   :integer

dans le schéma et je voulais revenir à zéro par défaut, j'ai donc écrit une migration en tant que telle:

change_column :player_states, :location, :integer, :default => 0

Cela a fait l'affaire.

14
rkgordon3

Pour l'instant, il n'y a aucun moyen de spécifier la valeur par défaut définie via le terminal dans la migration Rails.

vous pouvez exécuter les étapes ci-dessous afin de spécifier la valeur par défaut d'une colonne

1). Exécuter

$ Rails generate migration AddNotificationEmailToUsers notification_email:boolean

2). Spécifiez la valeur par défaut de la nouvelle colonne sur TRUE/FALSE en modifiant le nouveau fichier de migration créé.

class AddNotificationEmailToUsers < ActiveRecord::Migration
  def change
    add_column :users, :notification_email, :boolean, default: true
  end
end

3) .Exécuter la migration générée ci-dessus en exécutant.

$ rake db:migrate
2
Subhash Chandra

Frederick Cheung a raison, vous devrez modifier le fichier de migration pour cela. Une mise à jour mineure ajoute une virgule après le type de données avant de spécifier la valeur par défaut.

add_column :users, :notification_email, :boolean, :default => true
2
Pritesh Jain