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