2009-11-02 14 views
35

Ich habe eine neue Tabelle mit einer Spalte "Notiz" erstellt. Der Standardwert ist varchar (255) Ich glaube, aber ich möchte diese Spalte einen Textbereich vs. ein Feld haben und mehr Daten zulassen. Ich stelle mir vor, dass ich diese Änderung in ActiveRecord :: Migration-Datei machen würde, aber ich bin neugierig auf das Format. Ändere ich zum Beispiel einfach den varchar (255) in varchar (1000)? (Wenn ja, was ist das Format?varchar Migrationsfrage für Ruby on Rails

def self.up 
    create_table :notes do |t| 
     t.string :note :varchar(1000) 
    end 

Ist das das richtige Format? Außerdem, wie kann ich das Eingabefeld mehr Zeilen sein. Sorry, wenn dies einfach Sachen, aber ich bin neu in der Programmierung und RoR. danke.

Antwort

21

Sie können einfach den Typ ‚Text‘ anstelle von ‚string‘.

def self.up 
    create_table :notes do |t| 
    t.text :note 
    end 
end 

des Typs ‚Text‘ Verwendung in Datenbankspalte vom Typ TEXT führen. Varchar wird in der Regel auf ein Maximum begrenzt Länge von 255 (in MySQL haben andere RDBMS ähnliche Grenzen)

Wenn Sie Formularhilfen von Rails verwenden, wird ein Textfeld für dieses Feld ausgegeben (weil es vom Typ 'text' ist). textarea ist das Formularelement, das mehrzeilige Eingabe akzeptiert.

Edit: Wenn Sie bereits die create_table migriert, können Sie eine neue Migration erstellen den Spaltentyp zu ändern:

def self.up 
    change_column :notes, :note, :text 
end 
+0

Kann ich nur die ..._ create_notes.rb Datei ändern, die ursprünglich generiert wurde? Dann rake db: migrieren, um diese Änderung zu implementieren? Oder wird das Probleme verursachen und ich sollte eine alte Spalte entfernen oder eine Änderung vornehmen? – bgadoci

+0

Wenn Sie bereits migriert haben, müssen Sie entweder die Datenbank löschen, neu erstellen und migrieren (wodurch alle Daten in der Datenbank zerstört werden), oder Sie müssen Spalten ändern, wie Ben vorschlagen. Andernfalls, wenn Sie noch nicht migriert haben, ändern Sie einfach die Zeile in Ihrer Migration und führen Sie die Migration aus. – EmFi

+0

@bgadoci: Wenn Sie db: migrate nie aufgerufen haben, nachdem diese Migration generiert wurde, können Sie die Datei vor dem Aufruf von db: migrate einfach bearbeiten. Andernfalls können Sie eine neue Migration erstellen, um die Änderung vorzunehmen: def self.up change_column: Notizen,: Hinweis,: Text Ende –

27

Sie die Länge der Grenze Option, da so ...

ändern
def self.up 
    change_column :notes, :note, :string, :limit => 1000 
end 
+0

Muss ich diese Änderung zuerst über das Terminal vornehmen, indem ich einen Befehl script/generate migration ... ausfühle und dann die neue Datei bearbeite? Oder kann ich einfach die ursprüngliche Migrationsdatei öffnen und db: migrate ändern, speichern und optimieren? – bgadoci

+0

Wenn Sie eine der zuletzt erstellten Tabellen erstellt haben, befinden Sie sich im Entwicklungsmodus usw., dann Rollback. Überprüfen Sie schema.rb, um zu sehen, dass die Spalten nicht mehr aufgelistet sind, bearbeiten Sie dann die Migration und führen Sie db migrate erneut aus. Dies funktioniert nicht, wenn Sie Daten im Feld usw. haben. –

+1

Dies ist die richtige Antwort, wenn Sie ein varchar behalten möchten, beachten Sie, dass Sie MySQL 5.0.3 oder besser verwenden müssen, um ein Limit größer als 255 zu verwenden (http://dev.mysql.com/doc/refman/5.0/en/char.html) – Kris

7

Da ich ich

self.up 
    change_column :notes, :note, :text, :limit => nil 
end 
verwendet bereits gespeichert eine Menge Daten hatte

Wenn ich die Option: limit => nil weggelassen hätte, würde sich der Spaltentyp von varchar in text ändern, hätte aber immer noch eine maximale Länge von 255 Zeichen.

+0

danke! Es wurde nirgends geschrieben .. – nurinur