If you have a :string or :text field, you should pair it with a model validation that restricts its length.
There are two motivations for this:
- In modern Rails, database types
:stringand:textno longer have a relevant size limit. Without a validation a malicious user can quickly exhaust the hard drive of your database server. - In legacy Rails (or database schemas migrated from legacy Rails), database types
:stringand:texthad a database-side length constraint. When the user enters a longer string, the ActiveRecord validation will pass and then crash when making the SQL statement. The user sees an error box ("Something went wrong") instead of a validation error.
Example
We have a User model that has an email field as :string and a multi-line profile text (profile) as :text. We limit the length of both fields in the model:
class User < ApplicationRecord
validates :email, presence: true, length: { maximum: 100 }
validates :profile, length: { maximum: 20_000 }
end
See also
Posted by Henning Koch to makandra dev (2020-07-13 08:06)