Anda harus menggunakan textdengan Rails jika Anda menginginkan string tanpa batas panjang. Migrasi seperti ini:
def up
change_column :your_table, :your_column, :text
end
def down
change_column :your_table, :your_column, :string
end
harus menyelesaikan masalah. Anda mungkin ingin :null => falseatau beberapa opsi lain di akhir itu juga.
Saat Anda menggunakan stringkolom tanpa batas eksplisit, Rails akan menambahkan implisit :limit => 255. Tetapi jika Anda menggunakan text, Anda akan mendapatkan jenis string panjang apa pun yang didukung database. PostgreSQL memungkinkan Anda untuk menggunakan varcharkolom tanpa panjang tetapi sebagian besar database menggunakan tipe terpisah untuk itu dan Rails tidak tahu tentang varchartanpa panjang. Anda harus menggunakan textdi Rails untuk mendapatkan textkolom di PostgreSQL. Tidak ada perbedaan dalam PostgreSQL antara kolom jenis textdan satu jenis varchar(tapi varchar(n) yang berbeda). Selain itu, jika Anda menerapkan di atas PostgreSQL, tidak ada alasan untuk menggunakan :string(AKA varchar) sama sekali, database memperlakukan textdanvarchar(n)yang sama secara internal kecuali untuk batasan panjang ekstra untuk varchar(n); Anda sebaiknya hanya menggunakan varchar(n)(AKA :string) jika Anda memiliki batasan eksternal (seperti formulir pemerintah yang menyatakan bahwa bidang 432 pada formulir 897 / B akan memiliki panjang 23 karakter) pada ukuran kolom.
Selain itu, jika Anda menggunakan stringkolom di mana saja, Anda harus selalu menentukan :limitsebagai pengingat bagi diri Anda sendiri bahwa ada batas dan Anda harus memiliki validasi dalam model untuk memastikan bahwa batas tersebut tidak terlampaui. Jika Anda melebihi batas, PostgreSQL akan mengeluh dan memunculkan pengecualian, MySQL akan memotong string atau mengeluh secara diam-diam (tergantung pada konfigurasi server), SQLite akan membiarkannya lewat sebagaimana adanya, dan database lain akan melakukan sesuatu yang lain (mungkin mengeluh) .
Selain itu, Anda juga harus mengembangkan, menguji, dan menerapkan di atas database yang sama (yang biasanya berupa PostgreSQL di Heroku), Anda bahkan harus menggunakan versi server database yang sama. Ada perbedaan lain antara database (seperti perilaku GROUP BY) yang tidak akan mengisolasi Anda dari ActiveRecord. Anda mungkin sudah melakukan ini tetapi saya pikir saya akan menyebutkannya juga.
Pembaruan : Versi ActiveRecord yang lebih baru mengerti varchartanpa batas, jadi, dengan PostgreSQL setidaknya, Anda dapat mengatakan:
change_column :your_table, :your_column, :string, limit: nil
untuk mengubah varchar(n)kolom menjadi varchar. textdan varcharmasih sama sejauh menyangkut PostgreSQL tetapi beberapa pembuat formulir akan memperlakukannya secara berbeda: varcharmendapat <input type="text">sementara textmendapat multi-baris <textarea>.