gpt4 book ai didi

ruby-on-rails - rails 序列化数组验证

转载 作者:行者123 更新时间:2023-12-04 14:44:56 26 4
gpt4 key购买 nike

我需要验证保存在 email_list 中的电子邮件。为了验证,我有 EmailValidator。但我无法弄清楚如何在一对validates_each中使用它。还有其他方法可以进行验证吗?

class A < ActiveRecord::Base
serialize :email_list
validates_each :email_list do |r, a, v|
# what should it be here?
# EmailValidator.new(options).validate_each r, a, v
end
end

最佳答案

validates_each用于验证多个属性。在您的情况下,您有一个属性,您需要以自定义方式对其进行验证。

像这样做:

class A < ActiveRecord::Base
validate :all_emails_are_valid

...

private
def all_emails_are_valid
unless self.email_list.nil?
self.email_list.each do |email|
if # email is valid -- however you want to do that
errors.add(:email_list, "#{email} is not valid")
end
end
end
end
end

请注意,您还可以为此创建自定义验证器或将验证放在 validate 上的 proc 中。称呼。见 here .

这是一个带有自定义验证器的示例。
class A < ActiveRecord::Base

class ArrayOfEmailsValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
return if value.nil?
value.each do |email|
if # email is valid -- however you want to do that
record.errors.add(attribute, "#{email} is not valid")
end
end
end
end

validates :email_list, :array_of_emails => true

...

end

当然你可以把 ArrayOfEmailsValidator类,即 lib/array_of_emails_validator.rb并将其加载到您需要的地方。通过这种方式,您可以跨模型甚至项目共享验证器。

关于ruby-on-rails - rails 序列化数组验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23990679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com