如何跳过验证(在 gem 上充当可标记)

How to skip validation(acts as taggable on gem)

我正在尝试弄清楚如何向用户添加标签 table 并跳过验证(密码等)或其他内容。


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)。如何解决这个问题?

删除:

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

这样,更新用户时不会失败,验证将仅适用于 create 操作,并允许您更新记录而不会失败。