Ruby on rails Rails—如何确保在同一列上进行两次不同的验证

Ruby on rails Rails—如何确保在同一列上进行两次不同的验证,ruby-on-rails,Ruby On Rails,在MyDomain表中,我希望确保域名存在,同时希望通过使用正则表达式进行验证来确保其正确性 class MyDomain < ApplicationRecord validates :domain, presence: true validate :domain_invalid_value def domain_invalid_value url_regex = %r{\A[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6}(:[0-

在MyDomain表中,我希望确保域名存在,同时希望通过使用正则表达式进行验证来确保其正确性

class MyDomain < ApplicationRecord
  validates :domain, presence: true
  validate :domain_invalid_value

  def domain_invalid_value
    url_regex = %r{\A[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6}(:[0-9]{1,5})?\z}ix
    errors.add(:domain, "invalid value") if domain =~ url_regex ? true : false
  end
end
class MyDomain
但是我的
域\u无效\u值
无法确保,因为我包含
验证:域,存在:真


localhost
google.com
都被视为有效域,在创建或更新时不应如此。

您可以在同一行中使用
格式
验证,即与
存在
一起使用;例如:

class MyDomain < ApplicationRecord
  REGEX = %r{^(http|https):\/\/|[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6}(:[0-9]{1,5})?(\/.*)?$}ix

  validates :domain, presence: true, format: { with: REGEX, message: "invalid value" }
end
class MyDomain

您可以参考以获得所有可用验证帮助程序的列表。

如果您验证的是URL,那么为什么属性名为domain?嘿,谢谢,在rails文档中找到了相同的属性:validates:domain,presence:true,format:{with:%r{\a(http{124; https:\/\/\[a-z0-9]+([\-\.]{1}[a-z0-9]+)*.[[a-z]{2,6}(:[0-9]{1,5])(\/.]消息:“无效值”}