вопрос миграции varchar для Ruby on Rails

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

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

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

4 ответов


вы можете просто использовать тип "text" вместо "string".

def self.up
  create_table :notes do |t|
    t.text :note
  end
end

использование типа "текст" приведет к столбцу базы данных типа TEXT. Varchar обычно ограничен максимальной длиной 255 (в MySQL другие RDBMSs имеют аналогичные ограничения).

Если вы используете помощники формы Rails, a textarea будет выводиться для этого поля (поскольку оно имеет тип "текст"). textarea - элемент формы, который принимает многострочный ввод.

изменить: Если вы уже перенесли create_table, вы можете создать новую миграцию, чтобы изменить тип столбца:

def self.up
  change_column :notes, :note, :text
end

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

t.string :note, :limit => 1000

убедитесь, что вы используете версию MySQL(или любую другую базу данных), которая поддерживает varchars длиннее 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 символов.