38

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

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

それは正しいフォーマットですか?さらに、入力フィールドを複数の行にする方法を教えてください。これが簡単なことなら申し訳ありませんが、私はプログラミングとRoRに不慣れです。ありがとう。

4

4 に答える 4

82

正しい形式は次のようになります

t.string :note, :limit => 1000

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

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

t.text :note

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

于 2009-11-02T19:22:36.380 に答える
29

制限オプションを使用して長さを変更できます...

def self.up
  change_column :notes, :note, :string, :limit => 1000
end
于 2009-11-02T19:22:11.153 に答える
23

'string'の代わりに'text'タイプを使用するだけです。

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

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

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

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

def self.up
  change_column :notes, :note, :text
end
于 2009-11-02T19:19:50.927 に答える
7

すでにたくさんのデータが保存されていたので、使用しました

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

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

于 2011-02-01T21:24:42.507 に答える