2016-05-26 7 views
0

ich diese Wanderung lief:Schienen + Postgres Migration leerer String vs nil

def up 
    add_column :product_customers, :name, :string 
    add_column :product_customers, :email, :string 
end 

def down 
    remove_column :product_customers, :name, :string 
    remove_column :product_customers, :email, :string 
end 

Dann habe ich versucht, dieses zu laufen, aber hat nicht funktioniert:

def up 
    change_column_null :product_customers, :name, false 
    change_column_null :product_customers, :email, false 
end 

def down 
    change_column_null :product_customers, :name, true 
    change_column_null :product_customers, :email, true 
end 

Ich war überrascht und didn‘ Ich verstehe nicht, wie es möglich war. Dann schlug ich die Konsole auf und erkannte, dass der Wert der Felder nicht "" sondern nil war. Ich überprüfte dann ein paar andere Tabellen und sah, dass einige Tabellen und Felder "" als Standard haben und einige nil haben.

Ich möchte die leeren Zeichenfolgen in allen Tabellen haben. Also meine Fragen:

  1. Wenn ich eine neue Migration erzeugen, wie kann ich sicherstellen, dass meine String-Typ Spalten "" als Standard haben. Was zum Beispiel hätte ich in dem von mir bereitgestellten Code anders machen sollen?

  2. Was ist die Konvention, um die nil Werte zu "" für vorhandene Tabellen zu ändern?

Antwort

1
  1. Wenn ich eine neue Migration erzeugen, wie kann ich meine String-Typ-Spalten wird als Standard „“ stellen Sie sicher. Was zum Beispiel hätte ich in dem von mir bereitgestellten Code anders machen sollen?

Documentation hat Sie covered:

add_column :product_customers, :name, :string, default: "" 

Wenn Sie NULL Wert in Ihrer DB Spalten nicht zulassen wollen, fügen Sie dann auch null: false zu Migration:

add_column :product_customers, :name, :string, default: "", null: false 

  1. Wie lautet die Konvention zum Ändern der Nullwerte in "" für vorhandene Tabellen?

Um Spalte Standardwert Verwendung change_column_default zu ändern. Wenn Sie die DB-Regel für das Zulassen von NULL Werten ändern möchten, verwenden Sie change_column_null.

+0

Usbekjon, können Sie mir sagen, warum einige von ihnen "nil" waren und einige von ihnen waren ""? Ich habe den Standard nirgendwo festgelegt. –

+0

Sie müssen es beim Erstellen in Ihrem Controller festgelegt haben, wo Ihr 'param [: field]' einen Wert von '' '' hatte. Die mit "Null" -Wert hätten anders erstellt werden können, ohne dass dieses "Feld" in den "Params" oder in der Rails-Konsole gesetzt wurde. – Uzbekjon

+0

Eine letzte Frage. Verwenden Sie '' '' als Standard oder 'nil' für String-Spalten als Standard in Ihren Projekten? Sollte jemand an einem oder mehreren Fällen festhalten, wenn einer besser ist als der andere? –