验证属性而不保存

时间:2013-01-27 19:52:14

标签: ruby-on-rails ruby ruby-on-rails-3 validation

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

我正在编写一个AJAX API的后端,应根据

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

在用户模型中。这可以在注册表单中的用户名字段旁边创建一个小刻度或交叉,这样用户就不必等待查看是否使用了用户名。

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

任何人都知道我可以做些什么:

username = params[:username]

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

(我已经not_found正在工作)。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

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

if @user.errors.include? :username
  # username error
end