我创建了一个包含“note”列的新表。默认值是varchar(255)我相信但是我希望这个列是文本区域而不是字段并允许更多数据。我想我会在ActiveRecord :: Migration文件中进行此更改,但我对格式感到好奇。我只是将varchar(255)更改为varchar(1000)吗? (如果是这样的格式是什么?
def self.up
create_table :notes do |t|
t.string :note :varchar(1000)
end
这是正确的格式吗?此外,如何将输入字段设置为多行。对不起,如果这很容易,但我是编程和RoR的新手。谢谢。
答案 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个字符。