如何使用Rails和validates_url验证唯一的URL?

时间:2018-01-09 13:42:35

标签: ruby-on-rails validation

使用validates_url可以验证网址格式。

在模型中设置验证:

validates :homepage, uniqueness: true, url: true

无法将这两种情况验证为唯一网址:

但他们应该是一样的。如果第一个插入数据库,则应验证第二个,不允许插入。

我没有找到使用validates_url实现它的方法。有可能吗?

2 个答案:

答案 0 :(得分:2)

因此,两个验证,唯一性和URL分开发生,并且唯一性检查中没有任何内容可以处理这两个URL基本相同的事实 - 相反,字符串值在技术上是不同的,因此它不会&# 39;跳过唯一性验证。

您可以做的是在验证之前整理您的网址数据,并在模型中使用before_validation回调:

before_validation :process_url

def process_url
  self.homepage = self.homepage.slice(0, self.homepage.length - 1) if self.homepage.present? && self.homepage.ends_with?("/")
end

在验证启动之前调用此函数,并确保如果主页属性存在(即使稍后添加状态验证,如果它变为非可选,请记住这在验证之前运行),然后是任何尾随/已被删除。

整理完后,这两个URL字符串将是相同的,因此第二次验证将启动并停止保存。

希望有所帮助!

答案 1 :(得分:1)

我使用rubular.com来验证使用正则表达式。您可以尝试此^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\.*)?$