我查看了both 之前提出的问题的these,这些问题对我的案例有帮助,但不是完整解决方案。
基本上我需要从表单验证用户提交的URL。我首先验证它是以http://,https://或ftp://:
开头的class Link < ActiveRecord::Base
validates_format_of [:link1, :link2, :link3,
:link4, :link5], :with => /^(http|https|ftp):\/\/.*/
end
这对于它正在做的事情很有用,但我需要更进一步:
我很难确定如何干净有效地完成这项工作。
答案 0 :(得分:3)
仅供参考,您不必将数组传递给validates_format_of
。 Ruby将自动执行数组(Rails解析*args
的输出)。
所以,对于你的问题,我会选择这样的东西:
class Link < ActiveRecord::Base
validate :proper_link_format
private
def proper_link_format
[:link1, :link2, :link3, :link4, :link5].each do |attribute|
case self[attribute]
when nil, "", /^(http|https|ftp):\/\//
# Allow nil/blank. If it starts with http/https/ftp, pass it through also.
break
else
# Append http
self[attribute] = "http://#{self[attribute]}"
end
end
end
end
答案 1 :(得分:1)
为了补充上述内容,我使用Ruby URI模块来解析URL的有效性。
http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/classes/URI.html
它的效果非常好,它可以帮助我避免使用正则表达式。