链接字段的自定义验证

时间:2013-10-20 21:26:11

标签: ruby-on-rails validation

我有一个link属性的模型。 link属性可以设置为外部URL,例如:http://google.com或引用内部页面,例如:/users/1

表单link只是一个没有验证的文本字段。它使用link_to "whatever", model.link呈现。

有很多关于rails的URI验证的例子。但是,我发现没有人考虑相对路径。我正在考虑使用正则表达式,但想知道是否有更好的方法来设置link属性,可以处理外部(http / https)和内部(/ users / 1,/ locations,/ whatever / 1 / something / 2)路径。

应该允许的内容示例

http://www.google.com
https://www.google.com
http://www.google.com?something=blah
http://www.google.com/thing/test/
/locations
/locations/1
/products/1/skus/4
"" (e.g. blank)

不应允许的示例

www.google.com
google.com
products/2
htt://

修改

如果有更好的,完全不同的方法,我也会对此持开放态度。

1 个答案:

答案 0 :(得分:0)

因为只有管理员才会使用此文件,所以我只需要进行最低限度的验证,以确保输入正确的前缀(这样就不会意外遗漏某个字符)我最终会这样做:

validates :link, :format => /(^$)|(^(http:\/\/|https:\/\/|\/))/ix 

如果有人有更好的解决方案,我愿意改变它。