rails 中的模型验证validate

本文介绍Rails应用中如何使用ActiveModel进行数据验证,包括安装gem、基本验证方法如presence和uniqueness,以及如何自定义验证逻辑。同时展示了如何控制验证触发时机及跳过验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Validations的使用
安装gem
gem install activemodel
require 'active_model'
这样就可以使用这个gem包中内部的方法呢举个例子如下:
class User < ActiveRecord::Base

	validates :username, presence: { message: "用户名不能为空" }
	validates :username, uniqueness: { message: "用户名已存在" }
	validates :password, presence: { message: "密码不能为空" }
	validates :password, length: { minimum: 6, message: "密码长度最短为6位" }
# ...
end


.validates & .validates_*_of的使用(实际效果一样)
class User < ActiveRecord::Base

	validates :username, presence: { message: "用户名不能为空" }
	# same with
	validates_presence_of :username, message: "用户名不能为空"

	validates :username, uniqueness: { message: "用户名已存在" }
	# same with
	validates_uniqueness_of :username, message: "用户名已存在"
end


.validates_*_of方法
validates_acceptance_of
validates_confirmation_of
validates_format_of
validates_inclusion_of
validates_length_of
validates_numericality_of
validates_presence_of
etc.


#valid? & #errors
user = User.new(username: "hello")
user.valid? # => false
user.errors # => [password: error...]


自定义Validate使用
class User < ActiveRecord::Base
  validate :should_start_with_letter

  private
  def should_start_with_letter
    unless self.username =~ /^[a-z]/i
      errors.add(:username, "should start with letter")
    end
  end

end


自定义Validate - ActiveModel
class EvilUserValidator < ActiveModel::Validator
  def validate(record)
    if record.username == "Evil"
      record.errors[:base] << "This person is evil"
    end
  end
end

class User < ActiveRecord::Base
  validates_with EvilUserValidator
end
validations触发时间
默认情况下save触发


validate用于特定的动作
class User < ActiveRecord::Base

  validates_uniqueness_of :username, message: "用户名已存在", on: :create # or :update
end


跳过Validations使用
user = User.new(username: "hello")
user.save validate: false
跳过Validations的一些方法(这些方法使用的很少也要慎用)
decrement!
decrement_counter
increment!
increment_counter
toggle!
touch
update_all
update_attribute
update_column
update_columns
update_counters
具体细节请看官方API文档
http://api.rubyonrails.org/classes/ActiveModel/Validations/HelperMethods.html




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值