varchar Вопрос миграции для Ruby on Rails - PullRequest
35 голосов
/ 02 ноября 2009

Я создал новую таблицу, включающую столбец «заметка». По умолчанию это varchar (255). Мне кажется, но я хочу, чтобы этот столбец был текстовой областью по сравнению с полем и позволял больше данных. Я предполагаю, что я сделал бы это изменение в файле ActiveRecord :: Migration, но мне любопытно относительно формата. Могу ли я просто заменить varchar (255) на varchar (1000), например? (если да, то в каком формате?

def self.up
    create_table :notes do |t|
      t.string :note :varchar(1000)
    end

Это правильный формат? Кроме того, как я могу получить поле ввода в несколько строк. Извините, если это легко, но я новичок в программировании и RoR. Благодарю.

Ответы [ 4 ]

78 голосов
/ 02 ноября 2009

Правильный формат будет

t.string :note, :limit => 1000

убедитесь, что вы используете версию MySQL (или любую другую базу данных), которая поддерживает varchars длиной более 256 символов.

если вы хотите использовать большой текстовый блок, это будет

t.text :note

См. http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html для получения дополнительной информации

27 голосов
/ 02 ноября 2009

Вы можете изменить длину с помощью опции ограничения, так что ...

def self.up
  change_column :notes, :note, :string, :limit => 1000
end
21 голосов
/ 02 ноября 2009

Вы можете просто использовать тип '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
7 голосов
/ 02 февраля 2011

Поскольку у меня уже было много данных, я использовал

self.up
  change_column :notes, :note, :text, :limit => nil
end

Если бы я отключил опцию: limit => nil, тогда тип столбца изменился бы с varchar на текст, но его максимальная длина все равно составляла 255 символов.

...