Rails 3:在创建时,如何使用自定义方法验证“引荐代码”表单字段,该方法将验证引荐代码是否存在于另一个表中?

问题描述

| 这可能是一个简单的验证问题,但是我仅对内置的rails验证助手有经验,例如允许字段为空,和/或强制指定长度,或匹配正则表达式。 当用户注册(使用Devise)时,我的注册表单(和“用户”模式)还具有一个“ referred_by \”字段,他们可以在其中输入推荐代码(例如销售代表ID)。 \'referred_by \'字段在保存之前需要进行一些特殊的验证: *删除任何空格 *强制小写 *确认它是一个允许的“引荐代码”值(存在于ReferralCodes表的“ code”字段中) 如果它不是一个允许的值(例如,ReferralCode表中不存在),则需要在表格上标记一个验证错误,例如\“那不是有效的参考代码” 我不知道该方法放在何处,以便在尝试保存数据时作为Rails验证的一部分自动触发... 任何帮助,将不胜感激!     

解决方法

        您需要一个自定义验证器,并对模型中的数据进行一些清理。 app / models / user.rb:
class User < ActiveRecord::Base
  validates_with ReferralValidator

  before_save :clean_referral

  def clean_referral
    self.referred_by = self.referred_by.strip.lowercase
  end

end
app / lib / validators / referral_validator.rb:
class ReferralValidator < ActiveModel::Validator
  def validate(record)
    record.errors[:base] << \"#{record.referred_by} is not a valid referral code\" unless referral_code_valid?
  end
end
您必须定义referral_code_valid吗?使用您想对引荐代码进行有效分类的任何逻辑,并确保将lib目录的自动加载功能添加到您的配置中。您可以在config / application.rb中使用以下命令:
config.autoload_path += %W({config.root}/lib)
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...