模型验证不适用于更新
问题描述:
我在我的用户模型中进行了验证,以避免用户名中出现特殊字符和空格。模型验证不适用于更新
顺便说一下,我有大约10000个用户已经注册,其中一些用户名中有空格。
这是我的验证
validates :username, format: { with: /\A[a-zA-Z0-9]+\Z/, message: "Non puoi avere spazi o caratteri strani nel tuo username" }
如何添加例外:更新,等更新验证不解雇?
答
使用validate: false
http://api.rubyonrails.org/classes/ActiveRecord/Validations.html#method-i-save
@user = User.find(1)
@user.username = 'something'
@user.save(validate: false)
答
如果您只创建,所以你可以做以下的确认工作:
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