モデルでは、新しいユーザーを検証し、保存する前にユーザー名をダウンシェアしようとしています。Rails4 - validates_format_of:user_name.downcase not working
私はこれが働くだろうと思った:
validates_format_of :user_name.downcase,:with => /\A[0-9a-zA-Z]*\z/
残念ながら、それはしません。
どうすればいいですか?
おかげ
モデルでは、新しいユーザーを検証し、保存する前にユーザー名をダウンシェアしようとしています。Rails4 - validates_format_of:user_name.downcase not working
私はこれが働くだろうと思った:
validates_format_of :user_name.downcase,:with => /\A[0-9a-zA-Z]*\z/
残念ながら、それはしません。
どうすればいいですか?
おかげ
私はカスタムセッターあなたは、あなたがそれに任意の文字列を代入するときは、必ずUSER_NAMEでdowncased文字列を持っていると確信しています方法
def user_name=(value)
self[:user_name] = value.downcase
end
となるだろうが
で何が悪いですあなたのコードは次のとおりです:user_name.downcaseは実際には文字列 "user_name"(user_nameシンボル、to_s、downcase)で、正規表現は大文字に一致します
変更先:
validates_format_of :user_name,:with => /\A[0-9a-z]*\z/
あなたはvalidates_format_of
とbefore_save
コールバック
まずでこれら二つの作業を行うことができますuser_name
の形式を検証し、その後before_save
コールバックでそれをdowncase。
validates_format_of :user_name, with: /\A[0-9a-zA-Z]+\z/
before_save :downcase_name
private
def downcase_user_name
self.user_name = user_name.downcase
end
ありがとうございます。私はレールが大好きですが、時にはレールの魔法(それは27の異なる方法で何かをする能力)が私を狂ってしまいます。また、正規表現の素晴らしい1つは、私はそれを完全に逃した。 – user3096851
あなたの最初の必要条件としては、検証が必要なだけで、本当にいくつかの方法があります。あなたは正規表現のA-Zを見逃してしまいました。カスタムセッターは単なる提案であり、すべてのエスケナリオには適合しないかもしれませんが、私はそれがあなたのものに合うかもしれないと思います。 – arieljuod
それは私が欲しかったものです。私はこの問題に疲れています。すべてのユーザー名を常に小文字にしたいと思っています。再度、感謝します。 – user3096851