вопрос о миграции varchar для Ruby on Rails
-
12-09-2019 - |
Вопрос
Я создал новую таблицу, содержащую столбец "примечание".Я полагаю, что по умолчанию используется varchar (255), но я хочу, чтобы этот столбец был текстовой областью.поле и для предоставления большего количества данных.Я предполагаю, что я бы внес это изменение в файл ActiveRecord::Migration, но мне любопытно, какой формат.Могу ли я просто изменить varchar(255) на varchar (1000), например?(если да, то в каком формате?
def self.up
create_table :notes do |t|
t.string :note :varchar(1000)
end
Это правильный формат?Кроме того, как мне сделать так, чтобы поле ввода состояло из нескольких строк?Извините, если это простая штука, но я новичок в программировании и RoR.Спасибо.
Решение
Вы можете просто использовать тип "text" вместо "string".
def self.up
create_table :notes do |t|
t.text :note
end
end
Использование типа "текст" приведет к созданию столбца базы данных типа TEXT.Varchar обычно ограничен максимальной длиной 255 (в MySQL другие СУБД имеют аналогичные ограничения).
Если вы используете помощники формы Rails, a текстовое поле будет выведен для этого поля (поскольку оно имеет тип 'text'). текстовое поле является элементом формы, который принимает многострочный ввод.
Редактировать:Если вы уже перенесли create_table, вы можете создать новую миграцию, чтобы изменить тип столбца:
def self.up
change_column :notes, :note, :text
end
Другие советы
Правильным форматом было бы
t.string :note, :limit => 1000
убедитесь, что вы используете версию MySQL (или любой другой базы данных), которая поддерживает переменные длиной более 256 символов.
если вы хотите использовать большой текстовый блок, это будет
t.text :note
Видишь http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html для получения дополнительной информации
Вы можете изменить длину с помощью опции limit следующим образом...
def self.up
change_column :notes, :note, :string, :limit => 1000
end
Поскольку у меня уже было сохранено много данных, я использовал
self.up
change_column :notes, :note, :text, :limit => nil
end
Если бы я отключил опцию:limit => nil, то тип столбца изменился бы с varchar на text, но его максимальная длина по-прежнему составляла 255 символов.