Rails 5中uniqueness唯一性校验自定义验证消息异常问题求助
问题原因
Rails 模型校验默认会自动把字段名拼接到自定义错误消息的前方,你定义的name字段校验消息就会被自动加上Name前缀,最终返回不符合预期的拼接结果。
解决方法
方案1(适配Rails 5及以上版本)
在自定义消息开头添加^标识,Rails识别到该标识后就不会自动拼接字段名,修改后的代码如下:
class User < ApplicationRecord validates :name, uniqueness: { message: '^This User already exist' }, unless: :individual end
方案2(全版本兼容)
通过自定义校验方法将错误消息挂载到模型全局而非单个字段,就不会出现字段名前缀,代码如下:
class User < ApplicationRecord validate :custom_name_uniqueness_check, unless: :individual def custom_name_uniqueness_check return unless name.present? && User.exists?(name: name) errors.add(:base, 'This User already exist') end end
内容的提问来源于stack exchange,提问作者user12763413
相关产品推荐
相关产品推荐

