如何在Rails 3.0中编写数据库特定的自定义验证器?

时间:2011-04-12 04:38:16

标签: ruby-on-rails

我需要编写一个自定义验证器来检查数据库中是否存在记录。有点像验证唯一性的反面,但我找不到能够在内置验证器中实现我想要的东西。

我要做的是检查引用者是否存在于Users表中。如果引用者的用户名是“testuser”,我想在Users表中检查“testuser”是否确实存在。

我创建了一个自定义验证器:

class ReferrerExistsValidator < ActiveModel::EachValidator

但是我不确定如何继续从那里获取数据库,任何指针?

2 个答案:

答案 0 :(得分:1)

编写以下验证类

 class ReferrerExistsValidator < ActiveModel::EachValidator  
   def validate_each(object, attribute, value)  
     unless User.find_by_username(value)  
       object.errors[attribute] << (options[:message] || "referrer does not exist")  
     end  
   end  
 end 

将以下内容添加到相关模型

  

validates :referrer_exists => true

答案 1 :(得分:0)

我是铁杆/编码的新手,我可能会误解你,但你不能这样做:

@user.each do |user|
  unless @user.username == current_user.referral_name
    :alert "no user found"
  else whatever
  end
end

编辑:这根本不起作用 - 忽略这一点,让我考虑一下;)