web-dev-qa-db-fra.com

varchar Question de migration pour Ruby on Rails

J'ai créé un nouveau tableau 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 permettre plus de données. J'imagine que je ferais ce changement dans le fichier ActiveRecord :: Migration mais je suis curieux quant au format. Dois-je simplement changer le varchar (255) en 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 le bon format? De plus, comment puis-je obtenir le champ de saisie pour être plusieurs lignes. Désolé si ce sont des choses faciles mais je suis nouveau dans la programmation et RoR. Merci.

36
bgadoci

Vous pouvez simplement utiliser le type "texte" au lieu de "chaîne".

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

L'utilisation du type 'text' entraînera une colonne de base de données de type TEXT. Varchar est généralement limité à une longueur maximale de 255 (dans MySQL, les autres SGBDR ont des limites similaires).

Si vous utilisez les assistants de formulaire de Rails, un zone de texte sera affiché pour ce champ (car il est de type 'texte'). textarea est l'élément de formulaire qui accepte la saisie sur plusieurs lignes.

Modifier: si vous avez déjà migré la table create_table, vous pouvez créer une nouvelle migration pour changer le type de colonne:

def self.up
  change_column :notes, :note, :text
end
22
Siddhartha Reddy

Le format correct serait

t.string :note, :limit => 1000

assurez-vous que vous utilisez une version de MySQL (ou n'importe quelle base de données) qui prend en charge les varchars de plus de 256 caractères.

si vous voulez utiliser un gros bloc de texte, ce serait

t.text :note

Voir http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html pour plus d'informations

78
The Who

Vous pouvez modifier la longueur avec l'option de limite comme si ...

def self.up
  change_column :notes, :note, :string, :limit => 1000
end
28
Ben Crouse

Comme j'avais déjà beaucoup de données stockées, j'ai utilisé

self.up
  change_column :notes, :note, :text, :limit => nil
end

Si je quittais l'option: limit => nil, le type de colonne changerait de varchar en texte, mais il avait toujours une longueur maximale de 255 caractères.

7
roberocity