2010-01-24 54 views

回答

2

我会建议您在将它们存储在数据库中甚至验证之前,对URL进行标准化(添加/剥离尾部斜杠等,请参阅http://en.wikipedia.org/wiki/URL_normalization)。

validates_uniqueness_of :link, :case_sensitive => false 
before_validation :normalize_urls 

def normalize_urls 
    self.link.strip! 
    self.link.gsub!(/\/$/,'') 
end 

这不是你问的很什么,但如果你不存储标准化的网址,您要查询验证过程中以及对所有可能的变化DB和可以迅速得到昂贵。

1

您可以随时执行自定义验证程序(例如,使用validate方法)。

它可能是这个样子:

class MyModel < ActiveRecord::Base 
    validate :link_is_unique 

    def link_is_unique 
    #Clean up the current link (removing trailing slashes, etc) 
    link_to_validate = self.link.strip.gsub(/\/$/,'') 

    # Get the current count of objects having this link 
    count = MyModel.count(:conditions => ['link = ?', link_to_validate]) 

    # Add an error to the model if the count is not zero 
    errors.add_to_base("Link must be unique") unless count == 0 
    end 
end 

然后,您可以添加其他逻辑,以清理链接(即检查HTTP:// WWW等)