我必须使包含 http 链接的字段在 Rails 模型中保持唯一。除此之外,我还想拒绝链接变体,例如:
- 如果我在 http 地址存在时尝试插入 httpS 地址
- 如果我尝试插入带参数的链接,而存在另一个不带参数或不同的链接
我发现这个链接可能表明我的问题的答案,但我希望我可以直接在索引中执行此操作,因为我的情况不会随着时间的推移而改变。
In Rails, How do I validates_uniqueness_of :field with a scope of last 6 months
没有必要提供确切的答案,因为我对正则表达式有一些经验。一个不同的例子或引用已经很棒了,因为我找不到任何东西
最佳答案
类似这样的事情可以为您提供第一步:
require 'uri'
class Link < ActiveRecord::Base
attr_accessor :link
validate :check_link_integrity
validates :url, uniqueness: true
before_save :parse_link
def check_link_integrity
begin
URI::parse(self[:link])
return true
rescue URI::InvalidURIError => e
return false
end
end
def parse_link
uri_link = URI::parse( self.attributes.delete(:link) )
self.url = uri_link.host + uri_link.path
self.protocol = uri_link.scheme
self.parameters = uri_link.query
end
def to_s
"#{protocol}://#{url}?#{parameters}"
end
end
URI 模块文档:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/uri/rdoc/URI.html
关于ruby-on-rails - 如何使用 Rails 创建复杂且唯一的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20126282/