textUzunluk sınırı olmayan bir dizi istiyorsanız Rails ile kullanmalısınız . Bunun gibi bir göç:
def up
change_column :your_table, :your_column, :text
end
def down
change_column :your_table, :your_column, :string
end
işleri halletmeli. Bunun sonunda da isteyebilir :null => falseveya başka seçenekler olabilir .
stringAçık bir sınırı olmayan bir sütun kullandığınızda , Rails bir örtük ekler :limit => 255. Ancak kullanırsanız text, veritabanının desteklediği keyfi uzunlukta dize türünü alırsınız. PostgreSQL, varcharuzunluğu olmayan bir sütun kullanmanıza izin verir, ancak çoğu veritabanı bunun için ayrı bir tür kullanır ve Rails, varcharuzunluk olmadan bunu bilmez . Sen kullanmak zorunda textbir olsun Rails textsütun PostgreSQL. Orada bir tür sütun arasında PostgreSQL hiçbir fark textve tip bir varchar(fakat varchar(n) bir farklı). Ayrıca, PostgreSQL'in üstüne konuşlandırıyorsanız, :string(AKA varchar) kullanmak için hiçbir neden yoktur , veritabanı davranır textvevarchar(n)için ekstra uzunluk kısıtlamaları dışında dahili olarak aynı varchar(n); Yalnızca kullanmalısınız varchar(n)(AKA :stringharici kısıtlamayı varsa kolon boyutuna (örneğin 23 karakter uzunluğunda olacak şekilde 897 / B bu alanı 432 yazan bir hükümet biçimi olarak)).
Bir kenara, stringherhangi bir yerde bir sütun kullanıyorsanız , her zaman :limitbir sınır olduğunu kendinize hatırlatmak için belirtmelisiniz ve sınırın aşılmamasını sağlamak için modelde bir doğrulama yaptırmalısınız. Sınırı aşarsanız, PostgreSQL şikayet eder ve bir istisna oluşturur, MySQL dizeyi sessizce keser veya şikayet eder (sunucu yapılandırmasına bağlı olarak), SQLite olduğu gibi geçmesine izin verir ve diğer veritabanları başka bir şey yapar (muhtemelen şikayet eder) .
Ayrıca, aynı veritabanının (Heroku'da genellikle PostgreSQL olacak) üzerine geliştiriyor, test ediyor ve dağıtıyor olmalısınız, hatta veritabanı sunucusunun aynı sürümlerini bile kullanmalısınız. Veritabanları arasında ActiveRecord'un sizi engellemeyeceği (GROUP BY davranışı gibi) başka farklılıklar da vardır. Bunu zaten yapıyor olabilirsin ama yine de bahsetmeyi düşündüm.
Güncelleme : ActiveRecord'un daha yeni sürümleri varcharsınırsız olarak anlar , bu nedenle en azından PostgreSQL ile şunu söyleyebilirsiniz:
change_column :your_table, :your_column, :string, limit: nil
bir varchar(n)sütunu olarak değiştirmek için varchar. textve varcharPostgreSQL söz konusu olduğunda hala aynı şeydir, ancak bazı form oluşturucular bunları farklı şekilde ele varcharalır : bir <input type="text">oysa textbir çok satır alır <textarea>.