问题描述
|
这可能是一个简单的验证问题,但是我仅对内置的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)