Ruby on rails 如何在Rails 3.0中编写特定于数据库的自定义验证器?
我需要编写一个自定义验证器来检查数据库中是否存在记录。有点像验证唯一性的反面,但是我在内置的验证器中找不到能够实现我想要的东西 我试图做的是检查用户表中是否存在推荐人。如果推荐人的用户名是“testuser”,我想在Users表中检查“testuser”是否确实存在 我已经创建了一个自定义验证器:Ruby on rails 如何在Rails 3.0中编写特定于数据库的自定义验证器?,ruby-on-rails,Ruby On Rails,我需要编写一个自定义验证器来检查数据库中是否存在记录。有点像验证唯一性的反面,但是我在内置的验证器中找不到能够实现我想要的东西 我试图做的是检查用户表中是否存在推荐人。如果推荐人的用户名是“testuser”,我想在Users表中检查“testuser”是否确实存在 我已经创建了一个自定义验证器: class ReferrerExistsValidator < ActiveModel::EachValidator 类引用existsvalidator
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。。这太直截了当了。在看了唯一性验证程序代码之后,我把自己弄糊涂了。总之,对您提供的代码稍微做一点修改,您的意思是不是用用户名(值)而不是硬编码来查找?无论如何,非常感谢:)