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

Ruby on rails 如何在Rails 3.0中编写特定于数据库的自定义验证器?,ruby-on-rails,Ruby On Rails,我需要编写一个自定义验证器来检查数据库中是否存在记录。有点像验证唯一性的反面,但是我在内置的验证器中找不到能够实现我想要的东西 我试图做的是检查用户表中是否存在推荐人。如果推荐人的用户名是“testuser”,我想在Users表中检查“testuser”是否确实存在 我已经创建了一个自定义验证器: class ReferrerExistsValidator < ActiveModel::EachValidator 类引用existsvalidator

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

我试图做的是检查用户表中是否存在推荐人。如果推荐人的用户名是“testuser”,我想在Users表中检查“testuser”是否确实存在

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

class ReferrerExistsValidator < ActiveModel::EachValidator
类引用existsvalidator

但是,我不确定如何继续从数据库中获取详细信息,是否有任何指针?

我对rails/编码不熟悉,可能会误解您的意思,但您不能像这样做:

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

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

编写以下验证类

 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 
类引用existsvalidator


为什么这个数据库是特定的?(我认为数据库特定于MySQL、PostgreSQL或Oracle)Doh。。这太直截了当了。在看了唯一性验证程序代码之后,我把自己弄糊涂了。总之,对您提供的代码稍微做一点修改,您的意思是不是用用户名(值)而不是硬编码来查找?无论如何,非常感谢:)