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 => 1000Run Code Online (Sandbox Code Playgroud)
确保您使用的MySQL版本(或任何数据库)支持超过256个字符的varchars.
如果你想使用一个大的文本块,它会
t.text :noteRun 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)
由于我已经存储了大量数据,因此我使用过
self.up
change_column :notes, :note, :text, :limit => nil
end
Run Code Online (Sandbox Code Playgroud)
如果我不使用:limit => nil选项,那么列类型将从varchar更改为text,但它仍然具有255个字符的最大长度.