Подтвердить что ты не робот

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. Благодарю.

4b9b3361

Ответ 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 символов.