Supposons que vous ayez la table des utilisateurs suivante.
mysql> desc users;
+-----------------------------+-------------+------+-----+---------+----------------+
| Field                       | Type        | Null | Key | Default | Extra          |
+-----------------------------+-------------+------+-----+---------+----------------+
| id                          | bigint(20)  | NO   | PRI | NULL    | auto_increment |
| name                        | varchar(100)| NO   |     | NULL    |                |
| created_at                  | datetime    | NO   |     | NULL    |                |
| updated_at                  | datetime    | NO   |     | NULL    |                |
+-----------------------------+-------------+------+-----+---------+----------------+
Dans ce cas, lors de la création d'un modèle utilisateur Rails, je pense que ce nom est souvent validé avec moins de 100 caractères. À ce moment-là, avez-vous codé 100 en dur comme indiqué ci-dessous?
app/models/user.rb
validates :name, presence: true, length: { maximum: 100 }
Rails facilite l'obtention de méta-informations sur les tables de base de données. En utilisant cela, 100 pièces peuvent être prises dynamiquement à partir de la définition de table comme indiqué ci-dessous.
validates :name, presence: true, length: { maximum: columns.find{|c| c.name == 'name' }.limit }
Il est recommandé d'écrire de cette manière car la valeur de validation sera mise à jour automatiquement lorsque la définition de la table sera modifiée.
Recommended Posts