如何跳过验证(作为gem上的标记)

时间:2015-08-22 16:45:38

标签: ruby-on-rails validation acts-as-taggable-on

我试图找出如何向用户表添加标签并跳过验证(密码等)或其他内容。

user.rb

class User < ActiveRecord::Base
  authenticates_with_sorcery!

  validates_confirmation_of :password
  validates_presence_of :password, :on => :create
  validates :password, length: { in: 6..20 }

  acts_as_taggable_on :tags
end

settings_controller.rb

  class SettingsController < ApplicationController
    def add_tag
      current_user.tag_list.add(params[:name])
      current_user.save!
      redirect_to :back
    end
  end

然后我得到错误验证Validation failed: Password is too short (minimum is 6 characters)。怎么解决这个问题?

1 个答案:

答案 0 :(得分:2)

卸下:

validates :password, length: { in: 6..20 }

来自模特。

您的密码有以下两种验证:

  validates_presence_of :password, :on => :create
  validates :password, length: { in: 6..20 }

第一个:validates_presence_of :password, :on => :create将确保您create用户时出现密码。如果密码不存在,则不允许创建用户。 第二个验证:validates :password, length: { in: 6..20 }将确保密码长度必须介于6到20之间。

因此,如果您想向现有用户添加标签,即更新用户,那么您只需删除此验证:validates :password, length: { in: 6..20 }或仅在create上执行此验证:

  validates :password, length: { in: 6..20 }, :on => :create

这样,当您更新用户时它不会失败,并且validaiton仅适用于create操作,并且允许您更新记录而不会失败。