Rails4 - validates_format_of:user_name.downcase不起作用

时间:2016-09-23 16:27:19

标签: ruby-on-rails

因此,在模型中,我会验证新用户并尝试在保存用户名之前将其缩小。

我认为这样可行:

 validates_format_of :user_name.downcase,:with => /\A[0-9a-zA-Z]*\z/

不幸的是,它没有。

知道怎么做吗?

由于

2 个答案:

答案 0 :(得分:1)

我会选择自定义设置器

def user_name=(value)
  self[:user_name] = value.downcase
end

通过这种方式,您可以确保在为其分配任何字符串时,user_name中始终会有一个下载字符串

你的代码有什么问题:user_name.downcase实际上是字符串“user_name”(user_name符号,to_s,downcase),你的正则表达式也匹配大写字母

将其更改为:

validates_format_of :user_name,:with => /\A[0-9a-z]*\z/

答案 1 :(得分:0)

您可以使用validates_format_ofbefore_save回调

完成这两项任务

首先验证user_name的格式,然后在before_save回调中将其缩小。

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