Gebruik text
met Rails als je een snaar wilt zonder lengtelimiet. Een migratie als deze:
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
dingen moeten regelen. Misschien wil je :null => false
of andere opties aan het einde daarvan.
Wanneer je een string
. gebruikt kolom zonder een expliciete limiet, zal Rails een impliciete :limit => 255
. toevoegen . Maar als u text
. gebruikt , krijgt u elke willekeurige lengte van het tekenreekstype dat de database ondersteunt. Met PostgreSQL kunt u een varchar
. gebruiken kolom zonder lengte, maar de meeste databases gebruiken daarvoor een apart type en Rails weet niets van varchar
zonder lengte. Je moet text
. gebruiken in Rails om een text
. te krijgen kolom in PostgreSQL. Er is geen verschil in PostgreSQL tussen een kolom van het type text
en een van het type varchar
(maar varchar(n)
is verschillend). Bovendien, als u naast PostgreSQL implementeert, is er geen reden om :string
te gebruiken (ook bekend als varchar
) überhaupt behandelt de database text
en varchar(n)
hetzelfde intern, behalve de extra lengtebeperkingen voor varchar(n)
; gebruik alleen varchar(n)
(ook bekend als :string
) als u een externe beperking heeft (zoals een overheidsformulier dat zegt dat veld 432 op formulier 897/B 23 tekens lang zal zijn) op de kolomgrootte.
Even terzijde, als je een string
. gebruikt kolom waar dan ook, u moet altijd de :limit
. specificeren om uzelf eraan te herinneren dat er een limiet is en dat u een validatie in het model moet hebben om ervoor te zorgen dat de limiet niet wordt overschreden. Als je de limiet overschrijdt, zal PostgreSQL klagen en een uitzondering maken, MySQL zal stilletjes de string afkappen of klagen (afhankelijk van de serverconfiguratie), SQLite zal het laten doorgaan zoals het is, en andere databases zullen iets anders doen (waarschijnlijk klagen) .
Je moet ook dezelfde database ontwikkelen, testen en implementeren (meestal PostgreSQL bij Heroku), je moet zelfs dezelfde versies van de databaseserver gebruiken. Er zijn andere verschillen tussen databases (zoals het gedrag van GROUP BY) waarvan ActiveRecord u niet zal isoleren. Misschien doe je dit al, maar ik dacht ik vermeld het toch even.
Bijwerken :Nieuwere versies van ActiveRecord begrijpen varchar
zonder limiet dus, met PostgreSQL tenminste, kun je zeggen:
change_column :your_table, :your_column, :string, limit: nil
om een varchar(n)
te wijzigen kolom naar varchar
. text
en varchar
zijn nog steeds hetzelfde wat PostgreSQL betreft, maar sommige formulierbouwers zullen ze anders behandelen:varchar
krijgt een <input type="text">
terwijl text
krijgt een meerregelige <textarea>
.