2009-11-02 2 views
35

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

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

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

ответ

21

Вы можете просто использовать тип «текст» вместо «строки».

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

Использование типа «текст» приведет столбец базы данных типа TEXT. Varchar обычно ограничен максимум длина 255 (в MySQL, другие РСУБД имеют аналогичные ограничения).

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

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

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

Могу я просто сменить файл ..._ create_notes.rb, который был изначально сгенерирован? Затем выполните rake db: migrate, чтобы реализовать это изменение? Или это вызовет проблемы, и я должен сделать удаление старой колонки или изменения? – bgadoci

+0

Если вы уже перенесли миграцию, вам нужно либо отбросить базу данных, воссоздать ее и выполнить миграцию (которая уничтожает все данные в базе данных), либо вам нужны столбцы изменений, такие как Ben. В противном случае, если вы еще не перенести, просто измените строку в своей миграции и выполните миграцию. – EmFi

+0

@bgadoci: Если вы никогда не вызывали db: migrate после создания этой миграции, вы можете просто отредактировать файл перед вызовом db: migrate. В противном случае вы можете создать новую миграцию, чтобы внести изменения: def self.up change_column: notes,: note,: text end –

27

Вы можете изменить длину с опцией предела, как так ...

def self.up 
    change_column :notes, :note, :string, :limit => 1000 
end 
+0

Должен ли я выполнить это изменение через терминал, выполнив команду сценария/сгенерировать миграцию ... а затем отредактировав новый файл? Или я могу просто открыть исходный файл миграции и изменить, сохранить и rake db: migrate? – bgadoci

+0

Если это одна из последних созданных таблиц, вы находитесь в режиме разработки и т. Д., Затем откат. Проверьте schema.rb, чтобы увидеть, что числа больше не указаны, затем отредактируйте миграцию и снова выполните миграцию db. Это не будет работать, если у вас есть данные в поле и т. Д. –

+1

Это правильный ответ, если вы хотите сохранить varchar, обратите внимание, что вам нужно MySQL 5.0.3 или выше использовать ограничение больше 255 (http://dev.mysql.com/doc/refman/5.0/en/char.html) – Kris

78

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

t.string :note, :limit => 1000

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

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

t.text :note

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

7

Поскольку у меня было много данных, которые уже хранятся я

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

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

+0

спасибо! он нигде не был написан. – nurinur