模型验证不适用于更新

时间:2014-09-01 15:53:57

标签: ruby-on-rails

我在我的用户模型中进行了验证,以避免用户名中的特殊字符和空格。

顺便提一下,我已经注册了大约10000个用户,其中一些用户名中有空格。

这是我的验证

 validates :username, format: { with: /\A[a-zA-Z0-9]+\Z/, message: "Non puoi avere spazi o caratteri strani nel tuo username" }

如何为:update添加例外,那么不会触发更新验证吗?

2 个答案:

答案 0 :(得分:2)

如果您的验证仅适用于创建,那么您可以执行以下操作:

validates :username, format: { with: /\A[a-zA-Z0-9]+\Z/, message: "Non puoi avere spazi o caratteri strani nel tuo username" }, on: :create

如果此对象不是新记录,则跳过验证:

validates :username, format: { with: /\A[a-zA-Z0-9]+\Z/, message: "Non puoi avere spazi o caratteri strani nel tuo username" }, if: :new_record_object?
 def new_record_object?
   self.new_record?
 end

或者您可以在保存任何对象之前使用以下代码:

@user.save(validation: false)

您可以阅读有关skipping validations

的更多信息

答案 1 :(得分:0)

使用validate: false http://api.rubyonrails.org/classes/ActiveRecord/Validations.html#method-i-save

@user = User.find(1)
@user.username = 'something'
@user.save(validate: false)