38

我创建了一个包含“注释”列的新表。我相信默认值为 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

确保您使用的 MySQL(或任何数据库)版本支持超过 256 个字符的 varchars。

如果你想使用一个大的文本块,那就是

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

您可以简单地使用“文本”类型而不是“字符串”。

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

使用“文本”类型将导致 TEXT 类型的数据库列。Varchar 通常限制为最大长度 255(在 MySQL 中,其他 RDBMS 也有类似的限制)。

如果你使用 Rails 的表单助手,将会为这个字段输出一个文本区域(因为它是“文本”类型)。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 回答