varchar Ruby on Rails的迁移问题

时间:2009-11-02 19:01:33

标签: ruby-on-rails activerecord migration rails-migrations

我创建了一个包含“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 个答案:

答案 0 :(得分:78)

正确的格式是

t.string :note, :limit => 1000

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

如果你想使用一个大的文本块,它将是

t.text :note

有关详细信息,请参阅http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html

答案 1 :(得分:27)

您可以使用限制选项更改长度......

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

答案 2 :(得分:21)

您只需使用'text'类型而不是'string'。

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

答案 3 :(得分:7)

由于我已经存储了大量数据,因此我使用了

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

如果我离开了:limit => nil选项然后列类型将从varchar更改为text,但它的最大长度仍为255个字符。