1

在 Rails 3 中,我想查看属性的值是否使用模型的validates选项有效,而无需尝试保存或创建。

我正在编写 AJAX API 的后端,它应该检查用户名

validates :username, :length => {:minimum => 2, :maximum => 50}, :exclusion => {:in => RESERVED_USERNAMES}, :format => MY_REGEX, .etc

在用户模型中。这是在注册表单中的用户名字段旁边创建一个小勾号或交叉,因此用户不必等待查看用户名是否被使用。

我可以将它与正则表达式进行比较,但为了保持我的代码干燥,我认为在用户模型中使用验证会更好。

任何人都知道我该如何做以下事情:

username = params[:username]

if User.not_found(:username => username) && User.validate(:username => username)
    #yay!
else
    #nope
end

(我已经有not_found工作了)。

4

2 回答 2

2

除了运行所有验证之外,您还可以尝试检查与用户名相关的特定错误(您需要这样做才能获得错误消息)。

@user = User.new(params[:user])
if @user.invalid? && @user.errors[:username].any?
  # yay!
else
  # nope
end

您可以在不将用户持久保存到数据库的情况下运行它,因为使用的方法(包括#new 和#valid?)都没有实际保存对象。

于 2013-01-27T19:54:18.033 回答
0

您可以使用用户名参数创建新用户,然后检查错误:

@user = User.new( :username => params[:username] )
@user.valid?    

if @user.errors.include? :username
  # username error
end
于 2013-01-27T21:16:11.673 回答