question varchar Migration pour Ruby on Rails
-
12-09-2019 - |
Question
J'ai créé une nouvelle table comprenant une colonne « note ». La valeur par défaut est varchar (255) Je crois, mais je souhaite que cette colonne soit une zone de texte par rapport à un champ et pour permettre plus de données. Je suppose que je fais ce changement dans le fichier de migration de ActiveRecord mais je suis curieux de format. Est-ce que je change simplement le varchar (255) à varchar (1000) par exemple? (Si oui, quel est le format?
def self.up
create_table :notes do |t|
t.string :note :varchar(1000)
end
Est-ce que le format? De plus, comment puis-je obtenir le champ d'entrée pour être plusieurs lignes. Désolé si c'est une chose facile, mais je suis nouveau à la programmation et RoR. Merci.
La solution
Vous pouvez simplement utiliser le type 'texte' au lieu de 'string'.
def self.up
create_table :notes do |t|
t.text :note
end
end
L'utilisation du type « texte » se traduira par la colonne de base de données de type TEXT. Varchar est généralement limité à une longueur maximale de 255 (dans MySQL, d'autres SGBDR ont des limites similaires).
Si vous utilisez Rails de les aides de forme, textarea sera sortie pour ce champ (car il est de type « texte »). textarea est l'élément de forme qui accepte une entrée multi-ligne.
Edit: Si vous avez déjà migré le create_table, vous pouvez créer une nouvelle migration pour changer le type de colonne:
def self.up
change_column :notes, :note, :text
end
Autres conseils
Le format correct serait
t.string :note, :limit => 1000
assurez-vous que vous utilisez une version de MySQL (ou tout autre base de données) qui prend en charge Varchars plus de 256 caractères.
si vous voulez utiliser un gros bloc de texte, il serait
t.text :note
Voir http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters /TableDefinition.html pour plus d'informations
Vous pouvez modifier la longueur avec l'option limite comme si ...
def self.up
change_column :notes, :note, :string, :limit => 1000
end
Depuis que j'avais beaucoup de données déjà stockées je
self.up
change_column :notes, :note, :text, :limit => nil
end
Si je l'ai laissé le:. Limit => option zéro alors le type de colonne passerait de varchar au texte, mais il avait encore une longueur maximale de 255 caractères