友好表格验证(Rails)

时间:2009-01-25 17:47:06

标签: ruby-on-rails ruby forms validation

我查看了both 之前提出的问题的these,这些问题对我的案例有帮助,但不是完整解决方案。

基本上我需要从表单验证用户提交的URL。我首先验证它是以http://,https://或ftp://:

开头的
class Link < ActiveRecord::Base
  validates_format_of [:link1, :link2, :link3, 
        :link4, :link5], :with => /^(http|https|ftp):\/\/.*/
end

这对于它正在做的事情很有用,但我需要更进一步:

  1. 如果需要,应允许用户将表单字段留空,并
  2. 如果用户提供的网址尚未以http://开头(例如,他们输入google.com),则应通过验证,但在处理时添加http://前缀。
  3. 我很难确定如何干净有效地完成这项工作。

2 个答案:

答案 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

它的效果非常好,它可以帮助我避免使用正则表达式。