0

我有一个带有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://

编辑

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

4

1 回答 1

0

因为只有管理员会使用这个文件,所以我只需要最少的验证来确保输入了正确的前缀(这样就不会意外错过一个字符)我最终选择了这个:

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

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

于 2013-10-21T19:20:53.583 回答