domanda varchar migrazione per Ruby on Rails
-
12-09-2019 - |
Domanda
Ho creato una nuova tabella che include una colonna "note". Il valore predefinito è varchar (255) credo, ma vorrei avere questa colonna sia un'area di testo contro un campo e per consentire ulteriori dati. Immagino che avrei fatto questo cambiamento nel file di migrazione ActiveRecord :: ma sono curioso di sapere il formato. Ho semplicemente cambiare il varchar (255) a varchar (1000) per esempio? (In caso affermativo qual è il formato?
def self.up
create_table :notes do |t|
t.string :note :varchar(1000)
end
è che il formato giusto? Inoltre, come faccio ad ottenere il campo di immissione per essere più righe. Scusate se questa è roba facile, ma io sono nuovo di programmazione e RoR. Grazie.
Soluzione
Si può semplicemente utilizzare il 'testo' tipo invece di 'stringa'.
def self.up
create_table :notes do |t|
t.text :note
end
end
Utilizzando il tipo di 'testo' si tradurrà in colonna del database di tipo text. Varchar è generalmente limitata a una lunghezza massima di 255 (in MySQL, altri RDBMS hanno limiti simili).
Se si utilizza Rails' helper delle form, un textarea viene emesso per questo campo (perché è di tipo 'text'). textarea è l'elemento forma che accetta input multi-linea.
Edit: Se hai già migrato il CREATE_TABLE, è possibile creare una nuova migrazione di cambiare il tipo di colonna:
def self.up
change_column :notes, :note, :text
end
Altri suggerimenti
Il formato corretto sarebbe
t.string :note, :limit => 1000
assicurarsi che si sta utilizzando una versione di MySQL (o qualsiasi database) che supporta VARCHAR più lungo di 256 caratteri.
Se si desidera utilizzare un grande blocco di testo che sarebbe stato
t.text :note
http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters /TableDefinition.html per ulteriori informazioni
È possibile modificare la lunghezza con l'opzione limite così ...
def self.up
change_column :notes, :note, :string, :limit => 1000
end
Da quando ho avuto un sacco di dati già memorizzati ho usato
self.up
change_column :notes, :note, :text, :limit => nil
end
Se ho lasciato fuori il:. Limite => opzione nil poi il tipo di colonna cambierebbe da varchar al testo, ma aveva ancora una lunghezza massima di 255 caratteri