型号:用户
has_one :beta_invite
before_save :beta_code_must_exist
def beta_code_must_exist
if beta_invite_id == beta_invite.find_by_name(beta_invite.id)
user
else
nil
end
end
型号:BetaInvite
has_many :users
我想做的是在允许保存用户之前,检查DB中是否存在测试版邀请。
由于用户将把BetaInvite名称传递到字段中,我想检查它是否与数据库中的任何现有代码匹配。
希望我没有把事情搞得太乱。
如果您能帮我解决这个问题,我将不胜感激。
-
在表单中添加一个文本字段,用于:beta_code
-
为该字段添加一个attr_accessor:attr_accessor:beta_code
-
然后在模型中添加以下行(假设您只想在用户创建时进行此检查):
validate :beta_code_must_exist, :on => :create
-
更改
beta_code_must_exist
以在表单中添加错误。此外,请确保将:beta_code正确转换为正确的类型。下方未经测试的警告代码
def beta_code_must_exist @invite = BetaInvite.find_by_name(beta_code) if @invite.empty? errors.add(:beta_code, "is not a valid invite code") else beta_invite_id = @invite.id end end
将:inclusion
与:in
选项一起使用。您可以为:in
提供任何可枚举的:
validates :beta_invite, :inclusion => { :in => BetaInvite.all,
:message => "%{value} is not a valid beta invite code" }
来源:Rails活动记录验证