2012-12-21 9 views

Antwort

30

Beim Erstellen von Spalten, die für die Methode column dokumentiert sind, gibt es eine Reihe von Optionen. Sie gelten auch für add_column bei späteren Änderungen.

Die knappste Art und Weise eine begrenztere Spalte zu machen ist:

t.string :name, :limit => 20 
t.string :age, :limit => 6 

Als Hinweis, es höchst ungewöhnlich, Grenzen wie diese in Ihrer Datenbank zu verhängen und eine bessere Lösung ist auf dem Modell validates Verwendung zu begrenzen . Zum Beispiel:

validates :name, 
    :presence => true, 
    :length => { :maximum => 20 } 

MySQL hat eine Tendenz, Werte zu kürzen, die zu lang sind, ohne dass Sie zu sagen, so ist keine Längenbegrenzung, die schließlich zu verlorenen Daten führt, vor allem mit so kurzer Länge.

Denken Sie daran, dass VARCHAR Spalten in der Datenbank mit variabler Länge sind, so gab es keinen Speicher Vorteil zu zehn Zeichen Wert in einem VARCHAR(255) im Vergleich zu einem VARCHAR(20).

+0

Eine Frage bitte .. Warum definieren wir es nicht über die Befehlszeile auf diese Weise 'Name: varchar (20)' beim Generieren von Modell, war ich nur begierig zu wissen? .. Bitte für eine vage Frage nichts ausmacht. –

+0

Das Definieren von Modellen über die Befehlszeile wird unterstützt, ist jedoch viel begrenzter in dem, was Sie erreichen können. Es ist auch ein ziemlich merkwürdiges Merkmal, und ich bin mir nicht sicher, warum das nötig wäre. Welchen Vorteil bietet es, wenn Sie Ihre eigene vollständig angepasste Migrationsdatei aus einem Skript rendern können? In der Regel erfordert das Modell mindestens einige Bearbeitungen, um beispielsweise Indizes hinzuzufügen, außer in allen Ausnahmefällen. – tadman

+0

Danke für die Klärung meiner Zweifel. –