Raylar uzun dizeleri sütun türünü değiştirme
İlk göç, bir sütun content
dize olarak ilan ettim
Activerecord bunu string(255) gem açıklama göre yapılmış.
PostgreSQL kullanan heroku, uygulama basarım sonra, içerik şeklinde bir dizesi 255 karakterden daha içeri girersem hatası alıyorum
PGError: ERROR: value too long for type character varying(255)
Sorun, içeriği belki (serbest metin, karakter binlerce olabilir) çok uzun bir dize içeren ihtiyacım var
- Değişken (dize bunun için uygun değildir) pg kabul eder miydi?
- Nasıl bu sütun türünü değiştirmek için bir geçiş oluştururum
teşekkürler
CEVAP
Eğer hiçbir sınırı uzunluğu ile bir dize istiyorsanız Raylar text
kullanmalısınız. Böyle bir geçiş:
def up
change_column :your_table, :your_column, :text
end
def down
# This might cause trouble if you have strings longer
# than 255 characters.
change_column :your_table, :your_column, :string
end
tür şeyler gerekir. O da sonunda :null => false
ya da bazı diğer seçenekler isteyebilirsiniz.
Açık bir sınır olmadan string
bir sütun kullandığınızda, Raylar örtülü :limit => 255
ekleyecektir. Ama eğer kullanıyorsanız text
veritabanı destekler neyse alacaksın. PostgreSQL seni uzunluğu olmadan varchar
bir sütun kullanmak için izin verir ama çoğu veritabanı için ayrı bir türünü kullanın ve Raylar uzunluğu olmadan varchar
haberi yok. Raylar text
PostgreSQL text
column. Orada 15* text
*türünde bir sütun ve türde bir PostgreSQL arasında fark yok (ama 16**farklı). Ayrıca, eğer sen dağıtma üstünde PostgreSQL, sebep yok etmek için kullanın :string
(AKA varchar
), veritabanı davranır text
varchar(n)
aynı içten dışında ekstra uzunluk kısıtlamaları için varchar(n)
; tek kullanım varchar(n)
(AKA :string
) eğer bir dış kısıtlama gibi bir hükümet kurmak olduğunu söyleyen alan 432 formu 897/B olacak 23 karakter uzunluğunda) sütun boyutu.
Bir kenara olarak, eğer kullanıyorsanız string
sütun her yerde, her zaman belirtin :limit
bir hatırlatma olarak kendinizi bir sınırı yok doğrulama modeli sağlamak için sınır aşılmaması. Eğer aşan sınırı, PostgreSQL olacak şikayet ve yükseltmek için bir istisna, MySQL olacak sessizce kesecek dize veya şikayet (bağlı sunucu yapılandırma), SQLite olacak izin geçerken-ve diğer veritabanları yapacak başka bir şey (muhtemelen şikayet).
Ayrıca, test geliştirmek gerekir, ve aynı veritabanı genellikle Heroku de PostgreSQL olacak olan) üzerine dağıtma, hatta veritabanı sunucusu aynı sürümlerini kullanmalısınız. ActiveRecord sizi izole olmayacak veritabanları arasındaki diğer farklar (GRUP davranışı) vardır. Zaten bu yapıyor olabilir ama yine de bahsetmek istedim.
Raylar göçler: bir sütun için varsayıl...
En iyi Uygulamalar: uzun çalışma, PHP ...
nasıl sütun benzersiz yapmak ve Raylar...
Sütun değeri bir dize parçası değiştir...
Değiştirmek için geçiş raylar sütun...