我试图让我的代码保持干净。
我想做的是这样的事情:
class User < ActiveRecord::Base
validates :username, format { with: /\A[:alnum:]+\z/}
def self.create_with_username(name)
username = name.match(/\A[:alnum:]+\z/) if name
end
end
我正在复制正则表达式匹配规则:/\A[:alnum:]+\z/
我的问题是如何让/\A[:alnum:]+\z/
干,以便我可以在验证和.match方法中使用它?到目前为止,我尝试制作一个类方法,但验证似乎并没有找到它。当我尝试使它成为一个常量时,.match方法不会提取它(可能导致.match方法在类方法中...)
谢谢。
答案 0 :(得分:0)
您需要将POSIX类放在字符类中。
\A[[:alnum:]]+\z
答案 1 :(得分:0)
您应该将格式存储为常量或类方法,而不是局部变量:
#constant
USERNAME_FORMAT = /\A[:alnum:]+\z/ # <-- What I want to keep DRY
#class method
def self.username_format
/\A[:alnum:]+\z/
end
然后你可以说(使用常数例子)
validates :username, format { with: USERNAME_FORMAT}
def self.create_with_username(name)
username = name.match(USERNAME_FORMAT) if name
end