varchar Ruby on Rails的迁移问题

bga*_*oci 35 migration activerecord ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

这是正确的格式吗?此外,如何将输入字段设置为多行.对不起,如果这很容易,但我是编程和RoR的新手.谢谢.

The*_*Who 78

格式正确

t.string :note, :limit => 1000
Run Code Online (Sandbox Code Playgroud)

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

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

t.text :note
Run Code Online (Sandbox Code Playgroud)

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


Ben*_*use 27

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

def self.up
  change_column :notes, :note, :string, :limit => 1000
end
Run Code Online (Sandbox Code Playgroud)


Sid*_*ddy 22

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

def self.up
  create_table :notes do |t|
    t.text :note
  end
end
Run Code Online (Sandbox Code Playgroud)

使用'text'类型将导致TEXT类型的数据库列.Varchar通常限制为最大长度为255(在MySQL中,其他RDBMS具有类似的限制).

如果你使用Rails的表单助手,将为该字段输出textarea(因为它的类型为'text').textarea是接受多行输入的表单元素.

编辑:如果您已经迁移了create_table,则可以创建新的迁移以更改列类型:

def self.up
  change_column :notes, :note, :text
end
Run Code Online (Sandbox Code Playgroud)


rob*_*ity 7

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

self.up
  change_column :notes, :note, :text, :limit => nil
end
Run Code Online (Sandbox Code Playgroud)

如果我不使用:limit => nil选项,那么列类型将从varchar更改为text,但它仍然具有255个字符的最大长度.