Actuellement, je fais actuellement ce qui suit dans le modèle:
before_save :to_lower before_create :to_lower def to_lower self.name = self.name.downcase end
4 Réponses :
Vous n'avez pas besoin de l'avant_create si vous avez déjà avant_save.
before_save { |user| user.name = user.name.downcase }
Que diriez-vous avant_save {user.name.downe! }?
@Amitpandya j'ai fini par faire avant_save {| Utilisateur | utilisateur.name.downcase! } Qui fonctionne assez bien, je pense que vous devez toujours utiliser | utilisateur | ou vous n'avez rien à faire référence.
@BaneOffernity, quelle version de rails utilisez-vous?
Soyez prudent si nom code> est facultatif, il vaut mieux utiliser Essayer.
Pourquoi faites-vous cela? Si c'est pour effectuer des recherches insensibles de casse, vous voudrez peut-être simplement mettre cela dans votre logique de requête (en fait, je pense que les rails font un peu de cela déjà). Cependant, si vous souhaitez réellement que les données normalisées en minuscule dans la DB (par exemple, si vous traitez avec des hachages SHA1 ou quelque chose), vous faites la bonne chose. P>
Vous pouvez le faire dans la DB mais ce serait terriblement inefficace.
@Tom: Pourquoi dites-vous cela? Pour certains cas d'utilisation (par exemple, le cas de normalisation que j'ai mentionné), le faire dans la DB serait beaucoup plus efficace.
@Marmen Désolé pour la confusion, je parle principalement de la partie de faire des recherches insensibles sur la casse dans la logique de la requête. où plus bas (champ) = inférieur (entrée) code> est sensiblement plus lent que
où champ = inférieur (entrée) code>.
@ Marnenlaibow-Koser Basse () Appliquez une fonction sur chaque champ, ceci est terriblement innéficient car il évite d'utiliser des index.
@ArNoldroa Vous pouvez réellement indexer sur Basse (champ) si vous le souhaitez.
Je gère généralement de tels cas par:
def name=(val) write_attribute(:name, val.downcase) end