2010-05-07 6 views
0

N'est pas un problème Rails 3Interdire l'esperluette sous forme Rails

Dans un modèle de contact, j'ai un attribut company_name. Pour des raisons qui n'ont pas d'importance à cette question, je veux interdire un caractère d'esperluette. Nous avons beaucoup de clients avec des esperluettes dans le nom de leur entreprise, et les utilisateurs oublient qu'ils ne sont pas autorisés à utiliser ce personnage.

Il ne s'agit pas d'un problème de désinfection html. Je ne me soucie pas des espaces ou CDATA ou quoi que ce soit. Les entrées dans ce champ sont en texte clair et je ne veux pas qu'une esperluette soit saisie dans ce champ d'une manière ou d'une autre.

Je suppose qu'une validation sur le modèle est la voie à suivre. J'ai essayé validates_exclusion_of. J'ai essayé validates_format_of. Sans succès. Je suis peu sophistiqué quand il s'agit de regex, donc je peux faire des choses très mal. Mais la ligne de fond est - je dois empêcher un utilisateur d'entrer ce caractère "&" dans le champ company_name.

Merci mille fois.

Steve

+1

Les raisons ne peuvent pas d'importance, mais cela ne nous empêchera pas d'être extrêmement curieux de savoir pourquoi vous Forcer les entreprises à ne pas entrer leur vrai nom dans le champ de nom. – ceejayoz

+0

c'est une longue histoire. Il existe un modèle de société avec lequel nous n'interagissons pas (encore) directement, mais il existe une relation où la société a de nombreux contacts. Lorsque nous créons un contact, je fais un find_or_create_by_name soit pour créer l'association avec une société existante, soit pour créer un nouvel enregistrement de la société s'il n'en existe pas. Mettre le "&" dans la base de données ne présente aucun problème ici. – user209835

+0

Malheureusement, je fais aussi une autocomplete pour ce champ, et le javascript qui effectue cette action encode apparemment le "&" dans "&" quand il récupère l'enregistrement, créant ainsi une nouvelle société la prochaine fois que nous ajoutons un contact et faisons un gâchis de choses. Je n'arrive pas à comprendre comment modifier le script d'auto-complétion idiot, donc les meilleures choses suivantes ont été d'éviter d'insérer ce caractère en premier lieu. – user209835

Répondre

0
validates_format_of :company_name, :with => /\A[^&]*\Z/ 

Mais probablement vous pouvez simplement supprimer esperluette avant d'enregistrer enregistrement:

before_save :strip_ampersands 

def strip_ampersands 
    company_name.gsub!("&", "") 
end 
+0

Voyta - merci beaucoup. En fait, l'option before_save est parfaite car je peux l'utiliser pour permuter de manière transparente l'esperluette pour le mot "et". Parfait! – user209835