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