Ruby on rails 对验证相同但略有不同的两个字段进行自定义验证
以下是导致代码气味的范围:Ruby on rails 对验证相同但略有不同的两个字段进行自定义验证,ruby-on-rails,Ruby On Rails,以下是导致代码气味的范围: validates :email, uniqueness: { scope: :client_id }, if: Proc.new {|u| u.active? and !u.email.blank? } validates :companyemail, uniqueness: { scope: :client_id }, if: Proc.new {|u| u.active? and !u.companyemail.blank? } 以下是我尝试过的,但这会导致我
validates :email, uniqueness: { scope: :client_id }, if: Proc.new {|u| u.active? and !u.email.blank? }
validates :companyemail, uniqueness: { scope: :client_id }, if: Proc.new {|u| u.active? and !u.companyemail.blank? }
以下是我尝试过的,但这会导致我的测试失败,因为电子邮件字段已被占用:
class EmailValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
record.errors[attribute] << 'has already been taken' if record.active? and !attribute.blank?
end
end
validates :email, :companyemail, uniqueness: { scope: :client_id }, email: true
class EmailValidator record.errors[attribute]您可以使用以下命令对这两行进行分组:
例如:
with_options uniqueness: { scope: :client_id }, if: Proc.new { |u| u.active? && u.email } do
validates :email
validates :companyemail
end
当我阅读您的代码时,每次记录处于活动状态且电子邮件地址存在时,该验证器都会失败
您是否看过使用allow\u blank:true
选项
可能是这样的:
validates :email,: companyemail uniqueness: { scope: :client_id }, if: "record.active?", allow_blank: true
这并不测试是否存在CompanyMail,我需要它来测试电子邮件是否唯一如果电子邮件存在,并且CompanyMail是唯一的如果它存在,那么您可以添加presence:true
?抱歉,我现在没有完全遵守要求。