Assegnazione del valore predefinito durante la creazione del file di migrazione


104
rails generate migration AddRetweetsCountToTweet retweets_count:integer 

Ok, utilizzo la riga sopra per creare il file di migrazione che genera automaticamente il codice nel file generato per aggiungere una colonna a un modello Tweet con il tipo di dati intero. Ora voglio aggiungere il valore predefinito alla colonna aggiunta durante la generazione del file di migrazione. È possibile? Ho cercato su Google ma non sono riuscito a trovarlo. I ragazzi hanno bisogno di aiuto.


vedi la RailsGuide sull'argomento: guides.rubyonrails.org/migrations.html le informazioni che stai cercando sono nella prima sezione Anatomy of a Migration
Austin Lin

1
So esattamente cosa intendi. Ho continuato a provare a impostare anche un valore predefinito ed è stato un po 'una seccatura cercare di trovare informazioni. La semplice generazione dell'SQL nudo è stata più semplice, anche se non c'è migrazione nel controllo della versione.
Tass

Risposte:


166

Il generatore di migrazione predefinito non gestisce i valori predefiniti (i modificatori di colonna sono supportati ma non includono defaulto null), ma potresti creare il tuo generatore.

Puoi anche aggiornare manualmente il file di migrazione prima dell'esecuzione rake db:migrateaggiungendo le opzioni a add_column:

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

... e leggi Rails API


9
Ok grazie per la risposta. Ho pensato che sarebbe stato fantastico se il generatore di migrazione predefinito fornisse l'opzione per gestire i valori predefiniti in modo da non dover modificare il file di migrazione dopo essere stato generato per specificare il valore predefinito.
kxhitiz


9

Sì, non sono riuscito a vedere come utilizzare "default" nel comando del generatore di migrazione, ma sono stato in grado di specificare un valore predefinito per una nuova colonna di stringhe come segue, modificando il file di migrazione generato prima di applicare "rake db: migrate":

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

Questo aggiunge una nuova colonna chiamata "colore" al mio modello "Widget" e imposta il "colore" predefinito dei nuovi widget su "rosso".


(Questo era in Rails 4.2.)
MSC

4

Ho provato t.boolean: active,: default => 1 nel file di migrazione per creare l'intera tabella. Dopo aver eseguito la migrazione quando ho controllato in db, è diventato nullo. Anche se ho detto di default come "1". Dopodiché ho leggermente cambiato il file di migrazione in questo modo, quindi ha funzionato per me per l'impostazione del valore predefinito sulla creazione del file di migrazione della tabella.

t.boolean: attivo,: null => false,: default => 1. Ha funzionato per me.

La mia versione del framework Rails è 4.0.0


:default => false?
Christopher Oezbek

2

Dovresti prima creare la migrazione per le basi del modello, quindi creare un'altra migrazione per modificare la precedente utilizzando change_column ...

def change
    change_column :widgets, :colour, :string, default: 'red'
end
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.