web-dev-qa-db-ja.com

varchar移行の質問Ruby on Rails

「ノート」列を含む新しいテーブルを作成しました。デフォルトはvarchar(255)と思いますが、この列をフィールドではなくテキスト領域にして、より多くのデータを許可したいと思います。私はActiveRecord :: Migrationファイルでこの変更を行うと思いますが、形式に興味があります。たとえば、varchar(255)をvarchar(1000)に変更するだけですか? (もしそうなら、フォーマットは何ですか?

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

それは正しいフォーマットですか?さらに、入力フィールドを複数行にするにはどうすればよいですか。これが簡単なものであれば申し訳ありませんが、プログラミングとRoRは初めてです。ありがとう。

36
bgadoci

'string'の代わりに 'text'タイプを使用できます。

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

'text'タイプを使用すると、タイプTEXTのデータベース列になります。 Varcharは通常、最大長が255に制限されています(MySQLでは、他のRDBMSにも同様の制限があります)。

Railsのフォームヘルパーを使用する場合、このフィールドにはtextareaが出力されます(タイプが 'text'であるため)。 textareaは、複数行の入力を受け入れるフォーム要素です。

編集:create_tableをすでに移行している場合は、新しい移行を作成して列タイプを変更できます。

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

正しいフォーマットは

t.string :note, :limit => 1000

256文字を超えるvarcharをサポートするバージョンのMySQL(またはいずれかのデータベース)を使用していることを確認してください。

大きなテキストブロックを使用する場合は、

t.text :note

詳細は http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html を参照してください

78
The Who

このように制限オプションで長さを変更できます...

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

すでに多くのデータが保存されているので、

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

:limit => nilオプションを省略した場合、列のタイプはvarcharからtextに変更されますが、それでも最大長は255文字でした。

7
roberocity